SEO论坛::分享下python的scrapy的使用经验_新人投稿_SEO前线

  • A+
所属分类:其他杂项
本文信息本文由方法SEO顾问发表于2014-05-3016:30:41,共 2260 字,转载请注明:SEO论坛::分享下python的scrapy的使用经验_新人投稿_SEO前线_【方法SEO顾问】

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()即可(参见新建项目的教程)。

  1. from scrapy.spider import Spider
  2. from scrapy.selector import Selector
  3. from tutorial.items import BaiduItem
  4. class BaiduSpider(Spider):
  5.     name = "baidu"
  6.     allowed_domains = ["baidu.com"]
  7.     start_urls = ["http://www.baidu.com/s?q1=%BD%F0%B8%D5%C9%B0"]
  8.     def parse(self,response):
  9.         sel = Selector(response)
  10.         sites = sel.xpath('//div[@class="result c-container "]')
  11.         items = []
  12.         for site in sites:
  13.             item = BaiduItem()
  14.             item['num'] = site.re('(id="\d{1,3}")')
  15.             item['title'] = site.xpath('h3/a/text()').extract()
  16.             item['link'] = site.xpath('h3/a/@href').extract()
  17.             item['date'] = site.re('\xa0(\d{4}-\d{2}-\d{2})\xa0')
  18.             items.append(item)
  19.         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)

  1. from scrapy.spider import Spider
  2. from scrapy.selector import Selector
  3. from tutorial.items import MouzhanItem
  4. class MouzhanSpider(Spider):
  5.     name = "mouzhan"
  6.     allowed_domains = ["mouzhan.com"]
  7.     start_urls = open('url.txt','r').readlines()
  8.     def parse(self,response):
  9.         sel = Selector(response)
  10.         sites = sel.xpath('//h1/text()').extract()
  11.         items = []
  12.         for site in sites:
  13.             item = MouzhanItem()
  14.             item['h1'] = site
  15.             items.append(item)
  16.         return items

复制代码

采集到的数据:
 
最后输出的文件是json格式(也可以存储为csv等格式),编码是unicode,采集的中文在读取时处理下即可。测试的是一只蜘蛛10分钟1万url。可以同时运行多只蜘蛛。这里没有考虑ip代理,ua那些东西,不知道是采集的网站没有限制还是scrapy内部有处理,不过查了下,scrapy可以自行设置代理的。
scrapy也只是刚接触,并未有更深的研究,但是相对来说采集的速度非常快,我用beautifulsoup解析html采集的脚本要运行2个半小时才能采集1万数据,应该是不用给定url,在写的过程中制定规则就可以让蜘蛛去爬的。
至于scrapy在SEO上的应用,我也说不出来多少,至少用这个东西用来查排名应该不慢(杀鸡焉用牛刀),批量查收录之类的,采集效率也高,至于采集谁,采集回来的东西如何用,看你自己了。ps(轻喷:其实我也不知道学这东西干嘛,反正我是小企业站,暂时不知道用来干嘛。)

SEO论坛::分享下python的scrapy的使用经验_新人投稿_SEO前线.

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: