web crawler
1.增量抓取
垂直型爬虫
垂直爬虫不同于通用爬虫,其目的在于解决如何快速高效定制,精确抽取网页内容,并保存为结构化数据。
登录
cookie的处理
1.opener
|
|
2.cookielib
cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。Cookielib模块非常强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。它们的关系:CookieJar —-派生—->FileCookieJar —-派生—–>MozillaCookieJar和LWPCookieJar
1.使用python自带的模块cookielib
2.requests通过session来保持cookies,自动存入文件和从文件中导入.
Python中Cookie的处理:自动处理Cookie,保存为Cookie文件,从文件载入Cookie
Python中自动处理Cookie,将Cookie保存到文件,从文件中读取Cookie。
模拟浏览器实现登录
关于模拟浏览器的介绍写得很详细。
实例
代理
https://proxy.peuland.com的代理脚本:
https://github.com/mapleray/proxy_pool/blob/master/proxy.py
request库
Python Requests库:HTTP for Humans
工具列表
项目实例
知乎专栏里面有很多。如:
要点总结
常用库:
- 抓取网页: 常用的有requests, urllib.
- 解析: BeautifulSoup, lxml, re.
- 框架: scrapy, pyspier.
- url去重: bloomfilter
- 图片处理: Pillow
- OCR: Google 的 OCR 开源库 tesseract,对应的Python包是pytesser.
- 代理: 代理Tor, PySocks
- 消息队列: rabbitmq
要点:
异步爬取:
可以使用grequests库,或者对于简单的爬虫,tornado文档有个demo,稍微改下自己用。
模拟浏览器:
给请求加上header信息
提交表单:
一般是查找html源代码找到form,然后看form提交的地址,就可以直接使用requests的post方法提交数据。
模拟登录:
requests有个Session模块,使用起来很方便。有些网站如果是需要登录的,我们可以直接把登录后自己的cookies复制下来,直接作为requests的cookies参数传进去。
验证码:
ocr
动态加载:
1)追踪发出的请求,直接模拟 2)selenuim + phantomJS
- requests 模块, beautifulsoup模块, css选择器语法, re 正则模块, http 头编写, cookies, json解析等一定要掌握至熟练及以上程度.
- 爬取重 ajax 页面, 推荐谷歌优先搜索 phantomjs, 其次selenium.
- 破解图片验证码, 推荐谷歌开源库 pytesser, 进一步深入可以学习<高等数学-线性代数>, 谷歌搜索 pandas, numpy, k近邻算法.
- 过滤器, 推荐布隆过滤器 .
- 分布式爬虫(消息队列). 推荐 rabbitmq.
- 任务调度. 推荐谷歌搜索 schedule.
进阶的第一门课一定得是学会自己抓包,分析请求和返回数据。这当中会有一些字段恶心到你,比如通过base64或者md5加密,在模拟登陆验证中通常还会遇到RSA算法。如果你说你懒得学,那么上大杀器Selenium,但是你要忍受它对系统资源的占用(往往要启动浏览器和多个标签页)和不那么快速的爬取速度。
针对一些网站的爬取就像是在玩攻防,网站设置了种种反抓取的坑等着你掉进去。这时候你要学会维护好自己的User-Agent,维护好自己的Cookie池,维护好自己的代理IP池,添加恰当的Host和Referer,以让对方服务器觉得这一切看起来都跟真的一模一样,那么你的爬虫开发能力,已经入门了。
到此为止,这些知识还和 Python 没有半毛关系,但你知道了要干什么之后,再去搜 Python 相关的工具库,你就会发现原来 Requests 可以轻松构造一个包含自定义 payload 和 headers 的 post 请求;你就会发现原来 Scrapy 中可以使用TCP包注入来伪造IP,还能玩SYN FLOOD拒绝服务攻击(误)……
1.cookies处理
cookies是某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密),python提供了 cookielib模块用于处理cookies,cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用 来访问Internet资源。
关键在于CookieJar(),它用于管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对 CookieJar实例进行垃圾回收后cookie也将丢失,所有过程都不需要单独去操作。
综合教程