当前位置: 首页 > article >正文

从零开始学Python爬虫:(二)使用基本库urllib(下)

一、异常处理

关于某些情况下,可能会出现异常,如果不处理它们,会发生很多错误。

而urllib库提供了error模块来处理这些异常,该模块包括以下功能:

(1)URLError

该类含有一个属性reason,可以返回错误原因

示例:

from urllib import error,request
try:
    a=request.urlopen("某个不存在的页面")
except error.URLError as b:
    print(b.reason)

系统输出:

Not Found

程序未报错,而是直接输出了错误的原因

(2)HTTPError

该类含有三个属性:code(状态码)、reason(错误原因)、headers(请求头)

示例:

from urllib import error,request
try:
    a=request.urlopen("某个不存在的页面")
except error.HTTPError as b:
    print(b.code,b.reason,b.headers)

如此,会输出响应的状态码、错误原因、请求头

(注:如果以上两个的网址要找某个存在网址的不存在页面才能输出)

二、网址处理

这里采用urllib库中的parse模块,

包括功能:

(1)urlparse

用于识别和分段url

来看一个例子:

它将一个网址分为了若干部分(注:空为没有)

netloc表示域名、path是访问路径、params是参数、query是查询条件、fragment是锚点(定位页面下拉位置)

当然,以上只是urlparse的一个参数

它的完整形态是:

urlparse(网址,scheme,allow_fragments)

网址就是上面所说的一堆,

scheme则是协议,http还是https

allow_fragments是是否忽略锚点

(2)urlunparse

用于构造url

(注:参数必须包含网址、netloc域名、path访问路径、params参数、query查询条件、fragment锚点这六部分)

示例:


与这两个类似的还有urlsplit、urlunsplit和urljoin,大家可以自行了解。


(3)urlencode

用于构造GET请求参数

举个例子:

首先构建一个字典,存储参数。

然后使用urlencode方法将其转化为真正的参数

就可以看到该参数成功进入了网址中

当然,有字典转化为参数,就有参数转化为字典,这里就可以用parse_qs

(4)quote

将内容转化为URL编码格式

有编码就有解码,解码可以采用unquote方法

三、Robots协议

这个协议通常用来区分,哪些网站可以爬,哪些网站不可以爬。

它通常是一个名为robots.txt的文本文件

在爬虫时,如果访问到存在该文件,就会根据其中规定的范围内爬取

如果没有,则全页面可爬。

(1)样例

User-agent: *

Disallow: /

Allow: /public/

如上便是一个简单样例,

  • public一行表示限定了搜索爬虫只能爬取public目录
  • 其中的 * 一行表示对所有爬虫都有效(如果将 * 改为Baiduspider 则表示只对百度爬虫有效)
  • Disallow则指明了不允许爬取的目录

附:常见爬虫名称及对应网站

  1. Baiduspider
    对应网站:百度(baidu.com)
    说明:Baiduspider 是百度搜索引擎使用的爬虫,用于抓取网站内容并将其索引。

  2. Googlebot
    对应网站:谷歌(google.com)
    说明:Googlebot 是 Google 搜索引擎的爬虫,负责抓取和索引全球范围内的网页内容。

  3. Bingbot
    对应网站:必应(bing.com)
    说明:Bingbot 是微软必应搜索引擎的爬虫,用于抓取和索引互联网上的网页。

  4. Yandexbot
    对应网站:Yandex(yandex.com)
    说明:Yandexbot 是俄罗斯搜索引擎 Yandex 使用的爬虫。

  5. Sogou Spider
    对应网站:搜狗(sogou.com)
    说明:搜狗爬虫用于抓取互联网上的信息,用于搜狗搜索引擎。

  6. 360Spider
    对应网站:360搜索(so.com)
    说明:360Spider 是360搜索引擎的爬虫,负责抓取网站数据。

  7. Yahoo! Slurp
    对应网站:Yahoo(yahoo.com)
    说明:Yahoo! Slurp 是 Yahoo 搜索引擎的爬虫,用于抓取和索引网页。

  8. DuckDuckBot
    对应网站:DuckDuckGo(duckduckgo.com)
    说明:DuckDuckBot 是 DuckDuckGo 搜索引擎使用的爬虫,旨在获取网页内容进行索引。

  9. SeznamBot
    对应网站:Seznam(seznam.cz)
    说明:SeznamBot 是捷克搜索引擎 Seznam 的爬虫,负责抓取网页内容。


(2)使用robotparser

依旧是urllib库里的模块。

常用方法有:

  1. RobotFileParser()

    • 功能:创建一个 RobotFileParser 对象。
  2. set_url(url)

    • 功能:设置 robots.txt 文件的 URL 地址,通常是网站根目录下的 robots.txt
  3. read()

    • 功能:读取并解析指定 URL 的 robots.txt 文件内容。
  4. can_fetch(useragent, url)

    • 功能:判断给定的爬虫用户代理(user-agent)是否可以抓取指定 URL。如果 robots.txt 文件允许抓取该页面,则返回 True,否则返回 False
  5. mtime()

    • 功能:获取 robots.txt 文件的修改时间(如果存在的话)。返回值为时间戳。
  6. modified()

    • 功能:检查 robots.txt 文件是否已被修改。如果文件已经被修改,则返回 True,否则返回 False
  7. default_entry

    • 功能:设置默认条目。如果没有明确的规则匹配某个 user-agent,使用此默认条目进行判断。

举个代码示例来看一下:

from urllib import robotparser
#创建一个对象
a=robotparser.RobotFileParser()

#设置网址地址
a.set_url(robots.txt文件的链接)

#读取
a.read()

#判断
print(a.can_fetch('爬虫名称(如Baiduspider)' ,'要爬取的url'))

然后运行,返回看返回的是True还是False即可判断是否限制爬取。


http://www.kler.cn/a/549764.html

相关文章:

  • React 中的状态和属性有什么区别?
  • 在 Go 中实现事件溯源:构建高效且可扩展的系统
  • iOS事件传递和响应
  • springboot245-springboot项目评审系统(源码+论文+PPT+部署讲解等)
  • word文档提取信息
  • 从安装软件到flask框架搭建可视化大屏(二)——创建一个flask页面,搭建可视化大屏,零基础也可以学会
  • 鸿蒙NEXT开发-自定义构建函数
  • mac docker镜像加速正确配置方式
  • rabbitmq五种模式的总结——附java-se实现(详细)
  • Vue 自动配置表单 el-switch等不常用组件覆盖默认值问题
  • Versal - 基础5(裸机开发 AIE-ML+Vitis2024.2界面aie report介绍)
  • 基于Python实现的缓存淘汰替换策略算法,该算法将缓存分区
  • 网络安全-攻击流程-应用层
  • Java每日精进·45天挑战·Day17
  • 【第3章:卷积神经网络(CNN)——3.1 CNN的基本结构与工作原理】
  • 大语言模型推理中的显存优化 有哪些
  • 如何利用Vuex的插件来记录和追踪状态变化?
  • Linux下tomcat实现进程守护
  • PostgreSQL如何关闭自动commit
  • PHP框架入门指南:从零构建现代Web应用