Python3网络爬虫教程(1)urllib

Urllib

urllib是Python中用于处理URL(URL通俗来说就是网址)的一个工具包,文档地址为:https://docs.python.org/3/library/urllib.html,其中包括4大模块:urllib.request,urllib.error,urllib.parse,urllib.robotparser。

urllib.request模块用来打开和读取URLs的,是我们爬虫关注的重点,下一节会详细讲解;

urllib.error模块包含一些有urllib.request产生的错误,可以使用try进行捕捉处理,在下一篇教程中我们会详细介绍;

urllib.parse模块包含了一些解析URLs的方法;

urllib.robotparser模块用来解析网站的robots.txt文件,robots.txt文件是一个网站对网络爬虫的声明:其按照一定格式告诉爬虫哪些网页允许爬取,哪些网页不允许爬取。urllib.robotparser提供了一个单独的RobotFileParser类,通过该类提供的can_fetch()方法测试爬虫是否可以爬取该网站的一个网页。

Urllib.request

urllib.request.urlopen通过ulropen方法我们可以获取一个网页,res.read()返回的是bytes类型的网页源代码,所以需要decode()解码,网页的编码方式可以通过查看网页源代码里charset的值得到,如。

urllib.request.Request虽然通过urlopen方法可以直接获取一个网页,但更好更常用的做法是先使用Request方法包装网络请求,再通过urlopen方法获取网页。

headers是网络请求的请求头,请求头的内容会在之后教程中详细介绍。

get 和 postget 和 post 是两种网络请求方式,get 是从指定的资源请求数据,post 是向指定的资源提交要被处理的数据(网站登录多是post请求,区分方式会在请求头那篇进行介绍),对于python3网络爬虫而言,我们只需关注get请求不用额外附加data,而post请求需要即可。前面两个代码示例都是get请求,下面我们用腾讯翻译来展示post请求:

Request方法或urlopen方法的data参数默认为None,当data参数不为空的时候,网络请求方式为post。post的数据不能是str,而必须是bytes或iterable of bytes,因此需要对data使用方法编码。

urllib.request.ProxyHandler对于需要使用代理才能访问的页面,我们使用urllib.request.ProxyHandler方法来设置网络代理,设置代理后需要挂载和安装opener,然后使用这个安装好的opener而不是默认的urlopen进行网络请求。

因为代理是自己乱写的,所以代码不会运行成功。

至此,第一篇教程就结束了,下一篇会介绍HTTP状态码和urllib异常处理,时间的话会尽量保证一周一更,毕竟有大爷在催稿利诱在……

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180801G1YD5M00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券