目录

python网络爬虫开发实战之基本库使用

python网络爬虫开发实战之基本库使用


第二章 基本库的使用

最基础的http包括urllib、requests、httpx。

2.1 urllib的使用

使用urllib可以实现http请求的发送,著需要指定请求的url、请求头、请求体等。此外,urllib还可以把服务器返回的响应转换为python对象。

https://i-blog.csdnimg.cn/direct/a6b80f1c33ac4b5da584821c8b349209.png

1 发送请求

使用urllib库中的request模块,可以方便地发送请求并得到响应。

  • urlopen
import urllib.request

response = urllib.request.urlopen('https://www.python.org')
print(response.read().decode('utf-8'))

# 利用type方法输出响应的类型
import urllib.request

response = urllib.request.urlopen('https://www.python.org')
print(type(response))
print(response.status)
print(response.getheaders)
print(response.getheader('Server'))

# urlopen方法的API
urllib.request.urlopen(url, data=None, [timeout,]*, cafile=None, capath=None, cadefault=Flase, contexy=None)
  • data参数:可选,如果传递了这个参数,请求方式是post(模拟表单提交)。在添加该参数,需要使用bytes方法将参数转化为字节流编码格式的内容,即bytes类型。

https://i-blog.csdnimg.cn/direct/892f32d336df41bcaac251bac145d2d3.png

运行结果:

https://i-blog.csdnimg.cn/direct/5b5098c1b884483baad62d159e204b23.png https://i-blog.csdnimg.cn/direct/4a3a33bd07a7442c9fd1737054022ef7.png

  • timeout参数,设置超时时间,单位为秒。如果请求超出了设置的这个时间,还没有得到响应,就会抛出异常。如果不指定该参数,则会使用全局默认事件。

https://i-blog.csdnimg.cn/direct/016ca22463294ffe8513c6bf2a21c2dd.png

或如下:

https://i-blog.csdnimg.cn/direct/63d025694f354b60be7bc2e3fb418d1c.png

  • 其他参数:context参数,必须是ssl.SSLContext类型,用来指定SSL的设置;cafile和capath分别用来指定CA证书和其路径;cadefault参数现在已经启用了,默认值为false。
  • request

https://i-blog.csdnimg.cn/direct/4e8432d94bdd45d985fa9941f0299163.png

https://i-blog.csdnimg.cn/direct/2a123fab87cb479aa3d4e0b7a8f7a68c.png

https://i-blog.csdnimg.cn/direct/a3edc1abcd654a7da54706d3278ec2d4.png

https://i-blog.csdnimg.cn/direct/89ddcbffca7a46619c3f20e563166f86.png

  • 高级用法:handler,可以理解为各种处理器,包括登陆验证、处理cookie、处理代理设置。

https://i-blog.csdnimg.cn/direct/10c3331c98d54cd0b973e3b6930ff2e2.png

https://i-blog.csdnimg.cn/direct/e17b1dbf5c41463c8660d4582fb4980b.png

  • 验证:适用于启用了基本身份认证的网站

https://i-blog.csdnimg.cn/direct/4fe1548705f8464a86345937bc359064.png

  • 代理

https://i-blog.csdnimg.cn/direct/c6a2a47b637644b9b5a38a208f9416a9.png

  • cookie

获取网站的cookie:

https://i-blog.csdnimg.cn/direct/dc1bd0dbdd7b4369b96b9bf5bde2b548.png

运行结果:

https://i-blog.csdnimg.cn/direct/0d47e79324e9467ba7647db962d51aa7.png

(输出了每条cookie条目的名称和值)

输出文件格式的内容:

1.txt格式

https://i-blog.csdnimg.cn/direct/d56d1616355a4e159b9a110eb9bf65d8.png

2.lwp格式

https://i-blog.csdnimg.cn/direct/1b08653a311b4c55b97b27ebe49243d4.png

通过load方法读取本地的cookie文件,获取其中内容。

https://i-blog.csdnimg.cn/direct/ae140bae80e845078f4aa67f309b3272.png

2 处理异常

当出现问题时,request模块便会抛出error模块中定义的异常。

  • URLError

https://i-blog.csdnimg.cn/direct/29669f22a6094f698fd4d0cad2823f49.png

  • HTTPError

https://i-blog.csdnimg.cn/direct/3586c59a1d8747ddb950dff5de200a81.png

https://i-blog.csdnimg.cn/direct/4a1ac520750e4ab89356243ef0486911.png

3 解析链接

https://i-blog.csdnimg.cn/direct/12dc34bf933a46daa89a737d6cdf5422.png

  • urlparse

https://i-blog.csdnimg.cn/direct/6a7a927dd6a4450aacf5eb646a4c6c31.png

https://i-blog.csdnimg.cn/direct/9ef0ab717b174797b64c017c1e40ca55.png

  • urlunparse

https://i-blog.csdnimg.cn/direct/1c8d373eea3649daaf1c1daf5312a9b0.png

https://i-blog.csdnimg.cn/direct/ee5bd0a2f2f2455f9717e412bd1e7815.png

  • urlsplit

https://i-blog.csdnimg.cn/direct/05d64ce480d747cba16a4bcd7a555bda.png

  • urlunsplit

https://i-blog.csdnimg.cn/direct/da98015ca79846adb3db7826281925a3.png

  • urljoin

https://i-blog.csdnimg.cn/direct/0b66abd174ba4b89a502068ae956fba9.png

https://i-blog.csdnimg.cn/direct/dd79609c910246b1a7e45cc5cc824fba.png

  • urlencode

https://i-blog.csdnimg.cn/direct/44887c3f181e47a880e4c960f098f6dc.png

  • parse_qs

https://i-blog.csdnimg.cn/direct/214b869bfe61404482e4f766daec68fc.png

  • parse_qsl

https://i-blog.csdnimg.cn/direct/1fcee38ebe5543f0baf6bb68b761f66e.png

https://i-blog.csdnimg.cn/direct/a908e4e7baa240ea82f53196a0d7ac0d.png

  • quote

https://i-blog.csdnimg.cn/direct/8864cdccf1394bf1b553ee203fe93610.png

  • unquote

https://i-blog.csdnimg.cn/direct/262261b2be9a48b7a700894c83cba2dd.png

4 分析Robots协议

利用urllib库的robotparser模块,可以分析网站的robots协议。

  • Robots协议

https://i-blog.csdnimg.cn/direct/10bcf08797a04c34b1efb9cd744ee9c9.png

https://i-blog.csdnimg.cn/direct/7765e755778144d28656838c87147072.png

  • 爬虫名称

https://i-blog.csdnimg.cn/direct/7c1fdbde8b6e4201a2c4eeb7c40a3365.png

  • robotparser

https://i-blog.csdnimg.cn/direct/a5ebfdb25fcc4ce5949bb7bd0efd0bcb.png

https://i-blog.csdnimg.cn/direct/215f94f121d0492184348dc72dccf110.png

2.2 requests的使用

1 准备工作

pip install requests

2 实例引入

https://i-blog.csdnimg.cn/direct/7a444f7da5c0424eaad9e84b97e1fb4f.png

3 GET请求

  • 基本实例

https://i-blog.csdnimg.cn/direct/7ab3df7dd2014b589ebcd6143855d7bf.png

https://i-blog.csdnimg.cn/direct/a3eab2a6993842af9e3ba18059549095.png

https://i-blog.csdnimg.cn/direct/cdc38dc93da54f28999a49b76d24e4c1.png

  • 抓取网页

https://i-blog.csdnimg.cn/direct/43f8df92c2b8443ab9b8a03472d42b8b.png

  • 抓取二进制数

https://i-blog.csdnimg.cn/direct/967e3644a78d4ee5a638951cd0a098fc.png

https://i-blog.csdnimg.cn/direct/a5f68938c77b4547b8ab0ef5696dcff8.png

https://i-blog.csdnimg.cn/direct/200957684f554ecb829fb0e62e6de417.png

  • 添加请求头

https://i-blog.csdnimg.cn/direct/6cdf8af4f1054eedb713a0c3bd5eaf7c.png

4 POST请求

https://i-blog.csdnimg.cn/direct/3ba148eeb9f343b3b10a0e7d7f5ef5e6.png

https://i-blog.csdnimg.cn/direct/640b56b0b4f44c7cbb6abd31e1eb437f.png

5 响应

https://i-blog.csdnimg.cn/direct/a88edbeff5f745079f45b351e1db6225.png

https://i-blog.csdnimg.cn/direct/0e09dec1b00e4f4eb138d5ff763f7646.png

https://i-blog.csdnimg.cn/direct/e7283d2480114148999eabc0de7d7634.png

6 高级用法

  • 文件上传

https://i-blog.csdnimg.cn/direct/64a136d209e346b9a61d9beb1288673f.png

  • cookie设置

https://i-blog.csdnimg.cn/direct/682eb0ee96264e15b92d21be736192ba.png

https://i-blog.csdnimg.cn/direct/50eb8c3f845e49e4b28f362c55d8c81a.png

  • session维持

https://i-blog.csdnimg.cn/direct/0530c31b0ea54286bdfd1234e80c8b7e.png

https://i-blog.csdnimg.cn/direct/6cc1e236873d4128a9d10ed55d3b4a24.png

  • SSL证书验证

https://i-blog.csdnimg.cn/direct/f7b75cc0cea3467381c0961fc4837437.png

https://i-blog.csdnimg.cn/direct/0058643972ba4244a8cfbe6c5074372b.png

https://i-blog.csdnimg.cn/direct/151f31e85a5141a58421535d8f02cdff.png

  • 超时设置

https://i-blog.csdnimg.cn/direct/5bef09123ca34460a0cac6007768f086.png

  • 身份认证

https://i-blog.csdnimg.cn/direct/f62014e9246347a3a85af9ceb4248ed5.png

  • 代理设置

https://i-blog.csdnimg.cn/direct/9e41906ccecd4fcf8da220c720d6eaf1.png

  • prepared request

https://i-blog.csdnimg.cn/direct/752669dbe5ce4d4294dea31e596fa6a1.png

https://i-blog.csdnimg.cn/direct/5ff87fa747284df292cf012b81f105e4.png

2.3 正则表达式

1 实例引入

https://i-blog.csdnimg.cn/direct/77d67dc8c3a0467e911354f3450b9f79.png

https://i-blog.csdnimg.cn/direct/5dabb29016694969a4bc5a617d5d3325.png

https://i-blog.csdnimg.cn/direct/9730a82c116942e493c8acc8361515ce.png

https://i-blog.csdnimg.cn/direct/324ba63e4c754b41be14b9a79823d891.png

2 match

https://i-blog.csdnimg.cn/direct/37693d42e721427fbe8c738d39f3927a.png

  • 匹配目标

https://i-blog.csdnimg.cn/direct/185fd36d53ce43a88c624956f6e28189.png

https://i-blog.csdnimg.cn/direct/47b387a0902246fca74db51ef4f0ca2d.png

  • 通用匹配

https://i-blog.csdnimg.cn/direct/71a53706a1334c32871a3b5a70efbd2a.png

  • 贪婪与非贪婪

https://i-blog.csdnimg.cn/direct/2a71a25285744706aa9b068f828f5d33.png

https://i-blog.csdnimg.cn/direct/7dfccba56dbf45bda47147d586031f7f.png

  • 修饰符

https://i-blog.csdnimg.cn/direct/b05be7a629f4463493a62ab42307c1f1.png

https://i-blog.csdnimg.cn/direct/9f73e2c0892f4255ac2addff9079eb9f.png

  • 转义匹配

https://i-blog.csdnimg.cn/direct/c437a9672fb3443fa5c27b148979ef45.png

https://i-blog.csdnimg.cn/direct/4da23fcc36e540d1b21f2818cac2dac4.png

https://i-blog.csdnimg.cn/direct/ac8f619e09554579926c48c530beab99.png

https://i-blog.csdnimg.cn/direct/734d297b50f84ed7bc5dc883e53a76b2.png

4 findall

https://i-blog.csdnimg.cn/direct/25f148354f3641869966390f1cbed4e2.png

https://i-blog.csdnimg.cn/direct/ff963e73c7594938a626711b87bc2700.png

5 sub

https://i-blog.csdnimg.cn/direct/0c1361fce5a84072af363a422c8c5bb1.png

https://i-blog.csdnimg.cn/direct/c8c209b8b97a4cb6b1344ec257fd0d07.png

6 compile

https://i-blog.csdnimg.cn/direct/54d8bb0ec8624091bb9def8c96a49f13.png

2.4 httpx的使用

对于强制使用http2.0协议的网站,使用urllib和requests是无法爬取数据的。这时,需要要用到支持http/2.0的请求库,比较有代表性的是hyper和httpx。

1 示例

https://i-blog.csdnimg.cn/direct/3aff2ae8b1704b8f86235db8ca6ee9b7.png

2 安装

pip install httpx

pip install ‘httpx[http2]’

3 基本使用

https://i-blog.csdnimg.cn/direct/61307321a31d4b0f8ce9aa738a0a7245.png

https://i-blog.csdnimg.cn/direct/86aca159235c465bb059b4eeb256a4bd.png

https://i-blog.csdnimg.cn/direct/a2afd8fc88654d5fbb7c6baab4a342f5.png

4 client对象

https://i-blog.csdnimg.cn/direct/9060b30288ba40daac3da54c4bacd037.png

5 支持http/2.0

https://i-blog.csdnimg.cn/direct/ffbeeb0ff3f74543b36b57805d8ac627.png

https://i-blog.csdnimg.cn/direct/f88ad1e087db45ceaf4e938586a0de31.png

6 支持异步请求

https://i-blog.csdnimg.cn/direct/1480833e8a4e4af29ff6cbf89d984d74.png

来源:

https://i-blog.csdnimg.cn/direct/37f07ed242ab48c4a9328ab65064db0e.png