python3网络爬虫——day2-2

基本库的使用

使用urllib:官方文档https://docs.python.org/3/library/urllib.html

urllib分为四个模块:

1、request:它是最基本的HTTP请求模块,可以用来模拟发送请求;

2、error:异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作以保证程序不会意外终止;

3、parse:一个工具模块,提供了许多URL处理方法,比如拆分、解析、合并等;

4、robotparse:主要是用来识别网站的robots.txt文件,然后判断哪些网站可以爬,哪些网站不可以爬。

1.urlopen方法:

urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)

data参数:可选的,必须是bytes类型,如果是字典,可以先用urllib.parse模块的urlencode()编码

timeout参数:设置超时时间,单位为秒,请求超出了设置的这个时间,还没有得到响应,就会抛出异常。

2.Request

如果请求中需要加入Headers等信息,就可以利用更强大的Request类来构建。

class urllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)

headers:字典,它是一个请求头,可以在构造请求时通过headers参数直接构造,也可以通过调用请求实例的add_header()方法添加。添加请求头最常用的方法是通过修改User-Agent来伪装浏览器,默认的User-Agent是python-urllib,我们可以通过修改它来伪装浏览器。

origin_req_host:请求方的host名称或者IP地址。

unverifiable:这个请求是否无法验证,如果我们请求一个HTML文档,但是我们没有自动抓取图像的权限,这时为True

method:method的一个字符串,指示请求的方法,比如GET、POST和PUT等。

高级用法

Handler:类似于各种处理器。BaseHandler类,是所有Handler的父类。

1、HTTPDefaultErrorHandler:用于处理HTTP响应错误,错误都会抛出HTTPError类型的异常

2、HTTPRedirectHandler:用于处理重定向;

3、HTTPCookieProcessor:用于处理Cookies;

4、ProxyHandler:用于设置代理,默认代理为空。

5、HTTPPasswordMgr:用于密码管理,它维护了用户名和密码的表;

6、HTTPBasicAuthHandler:用于管理认证,如果一个连接打开时需要认证,那么可以用它来解决认证问题。

A.验证

B.代理

C.Cookies

处理异常

1.URLError:URLError类型来自urllib库的error模块,它继承自OSError,是error异常模块的基类,由request模块生成的异常都可以由这个基类捕获

2.HTTPError:是URLError的子类,专门用来请求HTTP请求错误。

有3个属性:code:返回HTTP状态码,比如404表示网页不存在,500表示服务器内部错误;

reason:同父类一样,用于返回错误的原因;

headers:返回请求头

解析链接

urllib库提供了parse模块,它定义了处理URL的标准接口

1.urlparse():该方法实现了URL的识别和分段。

一个标准的链接格式:

scheme://netloc/path;params?query#fragment

http://www.baidu.com/index.html;user?id=5#comment

scheme:协议;netloc:域名;path:访问路径;

params:代表参数;query:查询条件;fragment:锚点,直接定位页面内部的下拉位置。

urlparse(urlstring,scheme=' ',allow_fragments=True)

urlstring:必填,即待解析的URL;

scheme:默认的协议,假如这个链接没有待协议,那么用这个作为默认协议。

allow_fragments:是否忽略fragments,如果设置为False,fragment部分就会被忽略,它会被解析为path、parameters或者query的一部分,而fragment部分为空。

2.urlunparse():接受的参数是一个可迭代对象,长度必须是6,否则会抛出参数数量不足或者过多的问题。

3.urlsplit():与urlparse类似,但是不解析params这一部分,path与params为一个整体。

4.urlunsplit():将链接的各个部分组合成完整链接的方法,传入的参数是一个可迭代的对象,长度必须是5.

5.urljoin():将基本链接作为第一个参数,新的链接作为第二个参数。该方法会分析基本谅解的scheme、netloc和path这三个内容,并对新链接缺失的部分进行补充,并作为结果返回。

6.urlencode():将字典等序列化为URL参数。

7.parse_qs():反序列化为字典。

8.parse_qsl():将参数转化为元组组成的列表。

9.quote():可以将内容转化为URL编码格式

10.unquote():URL解码

分析Robots协议
 

Robots协议:爬虫协议、机器人协议,全名叫做网络爬虫排除标准,用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取。它通常是一个叫做robots.txt的文本文件,一般是放在网站的根目录下。

User-agent描述了搜索爬虫的名称,设置为*则代表协议对任何爬虫爬取有效。

Disallow指定了不允许抓取的目录;Allow一般和Disallow一起使用,排除某些限制,一般Disallow指定大范围不可爬取,Allow则指定哪些范围是例外,可以爬取。

1、robotparser模块

       该模块用来解析robots.txt,提供了一个RobotFileParser,可以根据网站的robots.txt来判断一个爬取爬虫是否有权限爬取这个网页。

调用:urllib.robotparser.RobotFileParser(url =’ ’),声明时不传入,默认为空,最后再使用set_url()方法设置一下。

a)set_url():用来设置robots.txt文件的链接;

b)  read():读取robots.txt文件并进行分析

c)parse():用来解析robots.txt文件,传入的参数是robots.txt某些行的内容,它会按照robots.txt的语法规则来分析这些内容

d) can_fetch():该方法传人两个参数, 第一个是Use r-age nt ,第二个是要抓取的URL 。返回的内容是该搜索引擎是否可以抓取这个URL ,返回结果是True 或False。

e) mtime():返回的是上次抓取和分析robots.txt 的时间,这对于长时间分析和抓取的搜索爬虫是很有必要的,你可能需要定期检查来抓取最新的robots.txt 。

f) modified () :它同样对长时间分析和抓取的搜索爬虫很有帮助,将当前时间设置为上次抓取和分析robots.txt 的时间。

猜你喜欢

转载自blog.csdn.net/weixin_41124748/article/details/82888590
今日推荐