【python爬虫】python的requests模块使用`Session`对象可以保持会话状态,自动处理Cookie等信息
构建爬虫时,应注重编码处理、数据解析和URL拼接等关键技术,同时合理使用异常处理来提高爬虫的健壮性和准确性。网络请求和数据解析过程中可能会遇到各种异常,合理的异常处理能够提高爬虫的健壮性。在爬取分页数据时,正确拼接URL是必不可少的步骤。响应内容可能使用不同的编码,正确处理编码是获取准确数据的关键。能够智能处理绝对路径和相对路径,返回正确的完整URL。提供的强大工具,可以高效地从HTML中提取数据
1. 请求发送
网络爬虫的第一步是发送HTTP请求。Python中的requests库是发送请求的首选工具,它简单易用且功能强大。
使用requests库
import requests
session = requests.Session()
session.headers = {
"User-Agent": "Mozilla/5.0",
# 其他请求头
}
response = session.get("目标URL")
使用Session对象可以保持会话状态,自动处理Cookie等信息。
自动处理编码
响应内容可能使用不同的编码,正确处理编码是获取准确数据的关键。
解决方案
- 指定编码:根据网页的
meta标签指定编码。 - 自动检测编码:使用
requests库的apparent_encoding属性自动检测编码。
response.encoding = response.apparent_encoding
2. 数据解析
获取到网页内容后,下一步是解析HTML数据。lxml库的etree模块是一个强大的HTML解析器。
使用lxml.etree
from lxml import etree
html = etree.HTML(response.text)
title = html.xpath("//title/text()")[0]
xpath是lxml.etree提供的强大工具,可以高效地从HTML中提取数据。
3. URL拼接
在爬取分页数据时,正确拼接URL是必不可少的步骤。Python的urllib.parse模块提供了urljoin函数,用于自动完成URL的拼接。
使用urljoin
from urllib.parse import urljoin
base_url = "https://example.com"
relative_url = "/path/to/resource"
full_url = urljoin(base_url, relative_url)
urljoin能够智能处理绝对路径和相对路径,返回正确的完整URL。
4. 异常处理
网络请求和数据解析过程中可能会遇到各种异常,合理的异常处理能够提高爬虫的健壮性。
添加异常处理
try:
response = session.get("目标URL")
response.raise_for_status() # 检查响应状态码
except requests.RequestException as e:
print(e)
5. 实战案例:抓取《红楼梦》全文
以“诗词名句网”上的《红楼梦》为例,演示如何综合运用上述技术抓取全文。
import requests
from lxml import etree
from urllib.parse import urljoin
session = requests.Session()
main_url = "https://www.shicimingju.com/book/hongloumeng.html"
response = session.get(main_url)
response.encoding = response.apparent_encoding
tree = etree.HTML(response.text)
hrefs = tree.xpath("//div[@class='book-mulu']/ul/li/a/@href")
for href in hrefs:
detail_url = urljoin(main_url, href)
detail_resp = session.get(detail_url)
detail_resp.encoding = detail_resp.apparent_encoding
detail_tree = etree.HTML(detail_resp.text)
content = detail_tree.xpath("//div[@class='chapter_content']//text()")
content = "".join(content).strip().replace(" ", "")
# 保存内容到文件
通过上述步骤,我们能够高效地抓取并处理网站数据。构建爬虫时,应注重编码处理、数据解析和URL拼接等关键技术,同时合理使用异常处理来提高爬虫的健壮性和准确性。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)