1. 请求发送

网络爬虫的第一步是发送HTTP请求。Python中的requests库是发送请求的首选工具,它简单易用且功能强大。

使用requests

import requests

session = requests.Session()
session.headers = {
    "User-Agent": "Mozilla/5.0",
    # 其他请求头
}
response = session.get("目标URL")

使用Session对象可以保持会话状态,自动处理Cookie等信息。

自动处理编码

响应内容可能使用不同的编码,正确处理编码是获取准确数据的关键。

解决方案
  1. 指定编码:根据网页的meta标签指定编码。
  2. 自动检测编码:使用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]

xpathlxml.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拼接等关键技术,同时合理使用异常处理来提高爬虫的健壮性和准确性。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐