【Python爬虫笔记】urlib库1~20

是这样的,想请分析下,【Python爬虫笔记】urlib库1~20
最新回答
惜三年青春

2026-08-20 16:15:41

Python爬虫中urlib库核心知识总结

一、urlib库的基础信息
  • 模块结构差异

    Python2中分为urllib和urllib2两个独立库。

    Python3中统一为urllib模块,功能拆分为:

    urllib.request:对应Python2的urllib,负责网络请求(如urlopen)。

    urllib.parse:对应Python2的urllib2,负责URL解析(如编码/解码)。

二、urllib.request核心方法
  1. urlopen(url)

    发送网络请求,返回http.client.HTTPResponse对象。

    错误处理:若响应码为400,尝试在URL末尾添加/后重试。

    示例:

    response = urllib.request.urlopen("
    https://example.com"
    )
  2. urlretrieve(url, filepath)

    直接下载资源到本地指定路径。

    示例:

    urllib.request.urlretrieve("
    https://example.com/image.jpg"
    , "local.jpg")
  3. 请求头定制

    问题:urlopen()无法直接设置请求头,易被反爬虫识别。

    解决方案:使用urllib.request.Request()创建请求对象,添加headers参数。

    示例:

    req = urllib.request.Request( url="
    https://example.com"
    , headers={"User-Agent": "Mozilla/5.0"})response = urllib.request.urlopen(req)
  4. 代理设置

    通过ProxyHandler和build_opener实现代理请求。

    示例:

    handler = urllib.request.ProxyHandler({"http": "127.0.0.1:8080"})opener = urllib.request.build_opener(handler)response = opener.open("
    https://example.com"
    )
三、urllib.parse核心功能
  1. URL编码与解码

    quote(url):对URL进行百分号编码(如空格转为%20)。

    unquote(url):解码百分号编码的URL。

    示例:

    encoded_url = urllib.parse.quote("
    https://example.com/
    测试")decoded_url = urllib.parse.unquote(encoded_url)
  2. 字典参数拼接

    urlencode(dict):将字典转换为URL参数字符串并编码。

    示例:

    params = {"key1": "value1", "key2": "value2"}query_string = urllib.parse.urlencode(params) # 输出: key1=value1&key2=value2
四、response对象方法
  1. 数据读取

    read():返回二进制格式的响应内容(需解码为字符串)。

    readlines():按行读取二进制数据。

    示例:

    binary_data = response.read()text_data = binary_data.decode("utf-8") # 转为字符串
  2. 元信息获取

    geturl():获取最终响应的URL(可能重定向)。

    getheaders():返回头部信息列表(含元组),可通过dict()转为字典。

    getcode():获取HTTP状态码(如200、404)。

    示例:

    headers_dict = dict(response.getheaders())status_code = response.getcode()
五、反爬虫策略与注意事项
  1. 请求头模拟

    必须设置User-Agent,避免使用默认值(易被识别为爬虫)。

    慎用字段:

    Accept-encoding: gzip, deflate(可能引发解压错误)。

    Content-length(由服务器自动处理,手动设置易出错)。

  2. 高级需求限制

    urlopen()和Request()无法直接设置代理或Cookie,需通过Handler或第三方库(如requests)实现。

六、XML与XPath数据提取
  1. XML与JSON对比

    XML:标签自定义,用于数据传输(如配置文件)。

    JSON:轻量级,主流数据交换格式(推荐优先使用)。

  2. XPath基础

    安装:pip install lxml。

    节点类型:元素、属性、文本(常用)。

    路径表达式:

    /:根节点。

    //:任意位置匹配。

    @:按属性选择(如//div[@class="header"])。

    函数:

    contains(attribute, "str"):属性包含指定字符串。

    starts-with(attribute, "str"):属性以指定字符串开头。

  3. 使用方式

    本地文件:etree.parse(filename)。

    网络文件:etree.HTML(url_string)。

    提取数据:

    from lxml import etreehtml = etree.HTML("<div><a href='/link'>Text</a></div>")links = html.xpath("//a/@href") # 提取所有a标签的href属性texts = html.xpath("//a/text()") # 提取所有a标签的文本
七、常见问题解决方案
  1. 编码错误

    确保响应内容解码时使用正确编码(如utf-8)。

    示例:

    text = response.read().decode("utf-8", errors="ignore") # 忽略错误字符
  2. 网络请求失败

    检查代理设置、请求头完整性及URL有效性。

    使用try-except捕获异常(如URLError、HTTPError)。

总结:urllib是Python爬虫的基础库,适合简单请求与URL处理。对于复杂需求(如代理、Cookie、JSON解析),建议结合requests、BeautifulSoup或Scrapy等库使用。