Python爬虫教程:解析requests.get()响应对象与BeautifulSoup提取HTML内容

import requests
# 发送GET请求
url = "https://www.example.com"
response = requests.get(url)
# 查看返回的状态码
print("Status Code:", response.status_code)
# 获取网页的内容(HTML)
html_content = response.text
print(html_content[:500])  # 输出前500个字符

Python爬虫教程:解析requests.get()响应对象与BeautifulSoup提取HTML内容

解析响应

requests.get()返回的对象包含诸多有用信息,像状态码以及响应内容等。response.text 能获取到网页的 HTML 源码。我们通过对返回的状态码进行检查,就可以确定请求是否成功,其中状态码 200 意味着成功。

3. 解析HTML内容

获取到网页内容之后,我们得解析 HTML 来提取所需的信息。BeautifulSoup 是 Python 里较为常用的 HTML 解析库之一,它具备将 HTML 文档转化为树状结构的能力,这样能让我们便于进行操作。

3.1 使用BeautifulSoup解析HTML

from bs4 import BeautifulSoup
# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html_content, 'lxml')
# 输出解析后的HTML结构(只输出前500个字符)
print(soup.prettify()[:500])

3.2 提取特定内容

HTML 被解析成 BeautifulSoup 对象之后,我们便可以运用各种方法来提取其中的内容。比如,能够获取网页里的所有链接,或者特定标签的内容。

提取所有的标签

# 提取所有标签
links = soup.find_all('a')
# 输出所有链接的地址
for link in links:
    print(link.get('href'))

提取指定ID或类名的元素

# 提取ID为'special'的元素
element_by_id = soup.find(id='special')
print(element_by_id)
# 提取类名为'content'的所有元素
elements_by_class = soup.find_all(class_='content')
for element in elements_by_class:
    print(element.text)

3.3 提取和清洗文本

有时候我们需要提取 HTML 标签,同时也需要清洗掉多余的空格和换行符。 有时候我们不但需要提取 HTML 标签,还需要把多余的空格或换行符清洗掉。 有时候我们既需要提取 HTML 标签,又需要清洗掉那些多余的空格或换行符。

# 获取第一个

标签的文本内容 h1_text = soup.find('h1').text.strip() print(h1_text)

4. 爬取多个页面

如果要爬取多个网页,那么可以把网页的 URL 提取出来,接着构造循环来抓取多个页面。以爬取某个分类页作为例子,需要爬取每一页的内容。

示例:爬取分页数据

import requests
from bs4 import BeautifulSoup
base_url = 获取页面的地址为 "https://quotes.toscrape.com/page/{}/" 。该地址用于特定的操作或访问相关的内容。它是一个特定格式的链接,其中的 "{}" 通常会被具体的页码等信息所替换。
for page_num in range(1, 6):  # 爬取前5页
    url = base_url.format(page_num)
    response = requests.get(url)
    
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'lxml')
        
        # 提取所有名言
        quotes = soup.find_all('span', class_='text')
        for quote in quotes:
            print(quote.text)
    else:
        print(f"Failed to retrieve page {page_num}")

4.1 延时请求和反爬虫

为避免给服务器带来过多负担,需在请求间加入恰当的延时。利用 time.sleep()函数能够让爬虫稍作休息。

import time
for page_num in range(1, 6):
    url = base_url.format(page_num)
    response = requests.get(url)
    
    # 模拟延时,防止被反爬虫机制阻止
    time.sleep(1)
    
    # 后续代码省略

5. 数据存储

爬虫抓取到的数据一般是需要进行存储的,这样便于后续的分析与处理。在 Python 当中,常用的存储方式包含 CSV 这种方式,还有 JSON 这种方式,以及数据库等方式。

5.1 存储到CSV文件

使用 pandas 库,能够把爬取到的数据存储为 CSV 文件。首先,要把数据整理成一个 DataFrame 形式。接着,调用 to_csv()这个方法来进行保存。

import pandas as pd
quotes_data = []
抓取的名言数据已存储在 quotes_data 列表中。
for page_num in range(1, 6):
    url = base_url.format(page_num)
    response = requests.get(url)
    
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'lxml')
        quotes = soup.find_all('span', class_='text')
        
        for quote in quotes:
            quotes_data.append({'quote': quote.text})
    
    time.sleep(1)  # 延时请求
# 将数据保存为CSV文件
df = pd.DataFrame(quotes_data)
df.to_csv('quotes.csv', index=False)
print("Data saved to quotes.csv")

5.2 存储到JSON文件

你若想要把数据存储成 JSON 格式,那么就可以运用 Python 的 json 模块。

import json
# 将数据保存为JSON文件
with open('quotes.json', 'w', encoding='utf-8') as f:
    json.dump(quotes_data, f, ensure_ascii=False, indent=4)
print("Data saved to quotes.json")

6. 反爬虫与限制

许多网站都具备反爬虫机制,这种机制会对我们访问其内容的频率进行限制。为了防止被封掉 IP 或者使访问受到限制,我们可以实施一些反爬虫的办法:

6.1 使用代理

通过代理服务器可以隐藏真实IP,从而避免IP被封禁。

proxies = {
    'http': 你的代理地址是 'http://your_proxy_address' 。,
    'https': '你的代理地址为 https://your_proxy_address'
}
response = requests.get(url, proxies=proxies)

6.2 设置User-Agent

许多网站会通过检查 User-Agent 字段来确定请求是否源自浏览器。能够伪装成浏览器来发送请求。

headers = {
    'User-Agent': Mozilla/5.0 表示使用的是 Mozilla 公司的产品。其运行在 Windows NT 10.0 系统上,且为 64 位系统(Win64)。同时,它的内核是 WebKit/537.36,这种内核类似于 Gecko。浏览器的版本是 Chrome/58.0.3029.110,并且使用的渲染引擎是 Safari/537.36。
}
response = requests.get(url, headers=headers)

7. 总结

本文介绍了如何利用 Python 构建一个简易的网络爬虫,其中包含了 HTTP 请求、HTML 解析、数据提取、分页爬取、数据存储这些方面,同时还涉及到如何应对反爬虫机制。掌握了这些基础内容后,你便能够开始在各类网站上进行数据采集。随着爬虫技术的不断深入,你可以去学习更为复杂的技巧,像处理由 JavaScript 动态加载的网页以及分布式爬虫等。

希望这篇文章能助力你迅速踏入 Python 爬虫开发的领域,开启属于自己的数据抓取征程!

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

30阅读

外国教程python,python编程教学视频

2026年09月02日

24阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

26阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读