网页抓取解密(一门python/deflate的处理碰到验证码怎么办?(一))
优采云 发布时间: 2022-01-21 16:10网页抓取解密(一门python/deflate的处理碰到验证码怎么办?(一))
作为一门高级编程语言,python 的定位是优雅、明确和简单。学python快一年了,用的最多的就是各种爬虫脚本:我写了一个捕获代理本地验证的脚本,我写了一个自动登录和论坛自动发帖的脚本,还有我写了一个自动接收电子邮件的脚本。我写了一个简单的验证码识别脚本。
这些脚本有一个共同点,都是和web相关的,而且总是会使用一些获取链接的方法,所以在爬取网站方面积累了很多经验。
基本网页抓取
获取方法
发布方法
2.使用代理服务器
这在某些情况下很有用,例如 IP 被阻止,或者 IP 访问数量受到限制等。
饼干处理
是的,是的,如果你想同时使用代理和cookies,添加proxy_support并将operner更改为
opener=urllib2.build_opener(proxy_support, cookie_support, urllib2.HTTPHandler)
4.伪装成浏览器访问
有的网站对爬虫的访问感到厌恶,所以都拒绝爬虫的请求。这时候我们需要伪装成浏览器,可以通过修改http包中的header来实现:
5、页面分析
页面解析最厉害的当然是正则表达式,对于不同的网站用户来说是不一样的,所以不用过多解释。
6.验证码处理
遇到验证码怎么办?这里有两种情况:
google之类的验证码,没办法。
简单验证码:字符数有限,仅使用简单平移或旋转加噪声,不失真。这仍然可以处理。大体思路是旋转回来,去除噪点,然后分割单个字符。划分完成后,使用特征提取方法(如PCA)进行降维生成特征库,然后将验证码与特征库进行对比。这个比较复杂,这里就不展开了。具体方法请找相关教材仔细研究。
7. gzip/deflate 支持
现在的网页一般都支持gzip压缩,往往可以解决很多传输时间。以VeryCD的首页为例,未压缩版为247K,压缩版为45K,是原来的1/5。这意味着爬行速度将快 5 倍。
但是python的urllib/urllib2默认不支持压缩。要返回压缩格式,必须在请求的header中写上'accept-encoding',然后在读取response后查看header是否有'content-encoding'项,判断起来非常繁琐琐碎是否需要解码。如何让urllib2自动支持gzip,defalte?
其实可以继承BaseHanlder类,然后用build_opener的方式处理:
8、多线程并发抓取
如果单个线程太慢,则需要多个线程。这是一个简单的线程池模板。这个程序简单的打印了1-10,但是可以看出是并发的。
Python的多线程虽然很鸡肋,但是对于爬虫等频繁使用的网络类型还是可以在一定程度上提升效率的。
9. 总结
阅读用 Python 编写的代码感觉就像阅读英语,让用户专注于解决问题而不是理解语言本身。Python虽然是基于C语言编写的,但是摒弃了C语言复杂的指针,简单易学。作为开源软件,Python 允许读取、复制甚至改进代码。这些性能使 Python 非常高效。有句话叫“人生苦短,我用Python”。这是一种非常令人兴奋和强大的语言。
总而言之,开始学习Python的时候,一定要注意这4点:
1.代码规范,这本身就是一个很好的习惯。如果一开始没有制定好的代码规划,以后会很痛苦。
2. 多动手,少读书。许多人在学习 Python 时只是看书。这不是学习数学和物理。您也许可以阅读示例。学习Python主要是学习编程思想。
3.努力练习。学习新知识点后,一定要记住如何应用,否则学完就会忘记。学习我们的业务主要是实用的。
4.学习必须高效。如果你觉得效率很低,那就停下来,找出原因,问问来这里的人为什么。