从网站pull data的时候,就需要做一个爬虫。任何能通过浏览器浏览的内容都可以被抓取。Crawler爬虫、Spider蜘蛛、Scraper采集器三个说的大概都是一个东西,稍有不同。做爬虫需要精通线程、队列、分布式处理。
1)分类
通用爬虫(抓取链接的整个页面)和垂直爬虫(抓取某类网站的指定数据)
*** 一般说的爬虫指的都是垂直爬虫。
2)爬什么
百度、歌曲、电影、图书
百度云盘、BT种子
社交网路(微信、微博、知乎、豆瓣)
股票信息(雪球)
电商信息(天猫、京东)
新闻资讯(腾讯、网易、新浪)
联系人信息(邮件、电话)
等一切想要获取的数据。
*** 更多看知乎上的讨论:
能利用爬虫技术做到哪些很酷很有趣很有用的事情?
3)工作原理
a.给爬虫一个种子URL
b.获取页面内容并存储,抽取页面中的URL
c.将新获取到的URL加入到URL队列中,等待处理
d.从URL队列中获取一个URL然后重复步骤b
4)抓取策略
深度优先策略:先访问子级网页,再访问同级网页。
广度优先策略:先访问同级网页,在访问子级网页。
最佳优先策略:优先访问包含有目标信息的网页。
5)抓取数据源
RSS、API、AJAX、Web(Pagination)
6)数据提起
正则匹配、DOM树(CSS path、XPath)
*** 一般爬虫都会爬取多个网站,所以需要对各个网站的解析规则统一管理。
7)数据去重
不重复抓取同样的URL
shingling算法
simHash算法
MD5 Checksum
8)爬取步骤
Crawling 抓取有用的数据源
Downloading 下载数据源的内容
Scraping 提取有用的数据信息(数据检查)
Extracting 提取数据信息中的数据元素(去重 分类)
Formatting 将数据元素整理成其他系统需要的格式
Exporting 将数据导出到其他系统(存储到数据库或建立索引)
*** 特殊网站的处理:模拟登陆、验证码识别、多网站抓取、JS渲染
9)检测爬虫的方法
User-Agent判断
短时间内同一IP的频繁访问
同一处理的多次执行
Honeypots检测:设置一些人类无法访问的连接
10)发爬虫策略
尽可能遵守robots.txt
限制爬取的速度、深度及页面数
减少并发请求数
伪装UA(动态User-Agent)
使用代理IP (IP Rotation, Proxies,Blacklisting)
不要抓取nofollow display:none 的连接
随机变化抓取模型,不要只执行一个任务
*** 网站认定为爬虫时:出现验证码输入、没有用的信息、HTTP错误
*** 重新进行ADSL拨号,获取新的IP
11)监控
爬虫服务器监控:带宽、CPU、内存、磁盘
爬虫程序的监控:爬虫程序是否正常运行
目标网站的监控:数据源是否可用,数据源结构是否改变
抓取信息的监控:信息是否乱码
12)开源框架
a.框架
Python
Scrapy
https://github.com/scrapy/scrapy
pyspider
https://github.com/binux/pyspider
Java
crawler4j
https://github.com/yasserg/crawler4j
WebMagic
https://github.com/code4craft/webmagic
b.HTTP请求
urlli或HttpURLConnection、HttpClient
c.HTML解析
BeautifulSoup
https://www.crummy.com/software/BeautifulSoup/
jsoup
https://jsoup.org/
d.JS渲染
Selenium
http://www.seleniumhq.org/
PhantomJS
http://phantomjs.org/
e.其他
Elasticsearch、Redis
参考:
https://github.com/lorien/awesome-web-scraping
http://www.cnblogs.com/wawlian/archive/2012/06/18/2553061.html
http://www.lanceyan.com/tech/arch/snscrawler.html
基础知识 - 爬虫
猜你喜欢
转载自rensanning.iteye.com/blog/2317064
今日推荐
周排行