主页 > IT业界  > 

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

从零开始学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则指明了不允许爬取的目录

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

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

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

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

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

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

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

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

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

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


(2)使用robotparser

依旧是urllib库里的模块。

常用方法有:

RobotFileParser()

功能:创建一个 RobotFileParser 对象。

set_url(url)

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

read()

功能:读取并解析指定 URL 的 robots.txt 文件内容。

can_fetch(useragent, url)

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

mtime()

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

modified()

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

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即可判断是否限制爬取。

标签:

从零开始学Python爬虫:(二)使用基本库urllib(下)由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“从零开始学Python爬虫:(二)使用基本库urllib(下)