python 爬虫入门到进阶(三)

本节:
带 Cookies 的访问
设置 headers 访问绕过网站检测
设置 Headers
有些网站会验证访问者是否合法,所以上一节的访问方式在一些网站就会失灵
,网站对请求不予以响应,为了模拟浏览器工作,我们需要设置一些 Headers 属性。
我们再来看一下访问网站的一些请求,打开 Chrome 浏览器,按 F12 打开 开发者工具
(允许我皮一下)
第一个请求返回的状态码是 302,是一个网页跳转,我截图让大家看的是 Request Headers,这里包含了文件编码、压缩方式、cookie、Host、UA 等一些信息,大部分网站只要传入一个 UA 就可以啦,当然有些网站会加入防盗链,如果遇到,还要加入 Referer 字段,后边的实战例子会说
1 | # encoding: utf-8 |
上边的例子中传递了参数和 headers,大体格式就是这个样子。
如果请求不需要传递参数直接置空就可以
我们设置了一个 Headers,在构建 request 时传入,在请求时,就加入了 headers 传送,服务器若识别了是浏览器发来的请求,就会得到响应。
特别的,这里要写一下这些属性的意思
User-Agent
: 有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求 Content-Type : 在使用 REST 接口时,服务器会检查该值,用来确定 HTTP Body 中的内容该怎样解析。
application/xml
: 在 XML RPC,如 RESTful/SOAP 调用时使用
application/json
: 在 JSON RPC 调用时使用
application/x-www-form-urlencoded
: 浏览器提交 Web 表单时使用 在使用服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致服务器拒绝服务
Proxy(代理)的设置
urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy。假如一个网站它会检测某一段时间某个 IP 的访问次数,如果访问次数过多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理
下面一段代码说明了代理的设置用法
1 | import urllib2 |
Timeout 设置
上一节已经说过 urlopen 方法了,第三个参数就是 timeout 的设置,可以设置等待多久超时,为了解决一些网站实在响应过慢而造成的影响。
例如下面的代码,如果第二个参数 data 为空那么要特别指定是 timeout 是多少,写明形参,如果 data 已经传入,则不必声明。
1 | import urllib2 |
1 | import urllib2 |
URLError
网络异常捕获
这里在调试程序时作用很大,有助于分析源码
1 | import urllib |
上边代码加入了异常捕获
Cookie 保存
Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于 RFC2109 和 2965 中的都已废弃,最新取代的规范是 RFC6265 。(可以叫做浏览器缓存)
有些网站内容时要在登陆后才能展示的,我们可以利用 Urllib2 库保存登录的 Cookie,并请求 Headers 时加入,达到获取数据的目的
Cookielib
cookielib 模块的主要作用是提供可存储 cookie 的对象,以便于与 urllib2 模块配合使用来访问 Internet 资源。Cookielib 模块非常强大,我们可以利用本模块的 CookieJar 类的对象来捕获 cookie 并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有 CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
它们的关系:CookieJar —- 派生 —->FileCookieJar —- 派生 —–>MozillaCookieJar 和 LWPCookieJar
1. 获取 Cookie 保存到变量
1 | import urllib2 |
2. 保存 Cookie 到文件
1 | import cookielib |
具体讲解都写在了注释里
3. 从文件获取 Cookie
1 | import cookielib |
有了 Cookie 就能对大多数网站进行操作了
本文写作方式以及部分内容借鉴静觅博客
下一节 HTML 解析,与妹子图爬取
- 标题: python 爬虫入门到进阶(三)
- 作者: tsvico
- 创建于 : 2018-06-14 21:11:26
- 更新于 : 2021-03-06 20:21:07
- 链接: https://blog.tbox.fun/2018/5951e111.html
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。