1. 使用 urllib.request 获取网页
urllib 是 Python 內建的 HTTP 库, 使用 urllib 可以只需要很简单的步骤就能高效采集数据; 配合 Beautiful 等 HTML 解析库, 可以编写出用于采集网络数据的大型爬虫;
注: 示例代码使用Python3编写; urllib 是 Python2 中 urllib 和 urllib2 两个库合并而来, Python2 中的 urllib2 对应 Python3中的 urllib.request
简单的示例:
![](https://upload-images.jianshu.io/upload_images/13406307-717e90952e49e7d7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2. 伪造请求头信息
有时爬虫发起的请求会被服务器拒绝, 这时就需要将爬虫伪装成人类用户的浏览器, 这通常通过伪造请求头信息实现, 如:
![](https://upload-images.jianshu.io/upload_images/13406307-9572edddfa9ecb17.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3. 伪造请求主体
在爬取某一些网站时, 需要向服务器 POST 数据, 这时就需要伪造请求主体;
为了实现有道词典在线翻译脚本, 在 Chrome 中打开开发工具, 在 Network 下找到方法为 POST 的请求, 观察数据可以发现请求主体中的 ‘ i ‘ 为经过 URL 编码的需要翻译的内容, 因此可以伪造请求主体, 如:
![](https://upload-images.jianshu.io/upload_images/13406307-28d2c3ac592947a7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
也可以使用 add_header() 方法伪造请求头, 如:
![](https://upload-images.jianshu.io/upload_images/13406307-b3e25fdd0af9f7f4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
4. 使用代理IP
为了避免爬虫采集过于频繁导致的IP被封的问题, 可以使用代理IP, 如:
![](https://upload-images.jianshu.io/upload_images/13406307-d62660cf3512a8d3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
注: 使用爬虫过于频繁的访问目标站点会占用服务器大量资源, 大规模分布式爬虫集中爬取某一站点甚至相当于对该站点发起DDOS攻击; 因此, 使用爬虫爬取数据时应该合理安排爬取频率和时间; 如: 在服务器相对空闲的时间 ( 如: 凌晨 ) 进行爬取, 完成一次爬取任务后暂停一段时间等;
5. 检测网页的编码方式
尽管大多数网页都是用 UTF-8 编码, 但有时候会遇到使用其他编码方式的网页, 因此必须知道网页的编码方式才能正确的对爬取的页面进行解码;
chardet 是 python 的一个第三方模块, 使用 chardet 可以自动检测网页的编码方式;
安装 chardet : pip install charest
使用:
![](https://upload-images.jianshu.io/upload_images/13406307-2155fe95eb7dd280.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
6. 获得跳转链接
有时网页一个页面需要在原始 URL 的基础上进行一次甚至多次跳转才能最终到达目的页面, 因此需要正确的处理跳转;
通过 requests 模块的 head() 函数获得跳转链接的 URL , 如
![](https://upload-images.jianshu.io/upload_images/13406307-74f99823c59d0c39.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)