- A+
python的爬虫框架,scrapy,采集效率非常高,一只蜘蛛跑一万url采集标题之类的10分钟不到就搞定了,当然了,可以同时跑多只蜘蛛。
首先是scrapy的安装教程,就不搬砖了,直接贴上地址:
http://blog.csdn.net/pleasecallmewhy/article/details/19354723
然后是新建项目的教程:
http://blog.csdn.net/pleasecallmewhy/article/details/19642329
之后就可以采集了。
在Scrapy里,使用的是叫做 XPath selectors的机制,它基于 XPath表达式。所以,如果要采集还是要熟悉下Xpath(正则也行)。之后的事情就简单多了。下面结合自己写的一只爬虫来吧,这个应该是属于scrapy最简单的爬虫了:
baidu_spider.py 取排名,标题,快照,和url(暂未引入其他模块获取真实url),当然,想取描述一样的,再写一个xpath规则,并在items.py中对应的肋下增加dec=Field()即可(参见新建项目的教程)。
- from scrapy.spider import Spider
- from scrapy.selector import Selector
- from tutorial.items import BaiduItem
- class BaiduSpider(Spider):
- name = "baidu"
- allowed_domains = ["baidu.com"]
- start_urls = ["http://www.baidu.com/s?q1=%BD%F0%B8%D5%C9%B0"]
- def parse(self,response):
- sel = Selector(response)
- sites = sel.xpath('//div[@class="result c-container "]')
- items = []
- for site in sites:
- item = BaiduItem()
- item['num'] = site.re('(id="\d{1,3}")')
- item['title'] = site.xpath('h3/a/text()').extract()
- item['link'] = site.xpath('h3/a/@href').extract()
- item['date'] = site.re('\xa0(\d{4}-\d{2}-\d{2})\xa0')
- items.append(item)
- return items
复制代码
运行命令:
json数据:
上边是一个简单的应用,在此基础上,我们将以上代码改进,批量获取一些内容:
以爬某站的spider为例:
1、url.txt存储url,一行一个。读取后作为参数传给start_urls。
2、我们要取的是他的所有h1,那么修改xpath表达式。
3、url.txt需要放在根目录下,蜘蛛也是在根目录下命令行运行。运行的命令为scrapy crawl mouzhan -o items.json -t json.(这里我们保存成了json格式,文件名叫做items.json)
- from scrapy.spider import Spider
- from scrapy.selector import Selector
- from tutorial.items import MouzhanItem
- class MouzhanSpider(Spider):
- name = "mouzhan"
- allowed_domains = ["mouzhan.com"]
- start_urls = open('url.txt','r').readlines()
- def parse(self,response):
- sel = Selector(response)
- sites = sel.xpath('//h1/text()').extract()
- items = []
- for site in sites:
- item = MouzhanItem()
- item['h1'] = site
- items.append(item)
- return items
复制代码
采集到的数据:
最后输出的文件是json格式(也可以存储为csv等格式),编码是unicode,采集的中文在读取时处理下即可。测试的是一只蜘蛛10分钟1万url。可以同时运行多只蜘蛛。这里没有考虑ip代理,ua那些东西,不知道是采集的网站没有限制还是scrapy内部有处理,不过查了下,scrapy可以自行设置代理的。
scrapy也只是刚接触,并未有更深的研究,但是相对来说采集的速度非常快,我用beautifulsoup解析html采集的脚本要运行2个半小时才能采集1万数据,应该是不用给定url,在写的过程中制定规则就可以让蜘蛛去爬的。
至于scrapy在SEO上的应用,我也说不出来多少,至少用这个东西用来查排名应该不慢(杀鸡焉用牛刀),批量查收录之类的,采集效率也高,至于采集谁,采集回来的东西如何用,看你自己了。ps(轻喷:其实我也不知道学这东西干嘛,反正我是小企业站,暂时不知道用来干嘛。)