发现更大的SEO世界
 找回密码
 注册

扫一扫,访问微社区

搜索
»首页»SEO培训 SEO论坛 SEO交流 帖子
12下一页
发新帖
姜姜,个人比较闲,学习python中    

[已通过]分享下python的scrapy的使用经验

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
复制代码

运行命令:

scrapy运行命令

scrapy运行命令

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(轻喷:其实我也不知道学这东西干嘛,反正我是小企业站,暂时不知道用来干嘛。)

评分

参与人数 3赞同 +12 收起 理由
52gcs + 4 呵呵, 听说大公司都是这么干
豫瞳 + 4
ZERO + 4

查看全部评分

发表于 2014-5-30 15:02:56
回复 收藏
xfxdtt,不变初心。。    

如果是跑排名,一个小时能跑多少?我的是pycurl一个小时两三千左右
发表于 2014-5-30 15:14:05
回复 收藏
didiaoxiaohu,请到个人资料页面设置个人签名    

写的挺好 最近也在学python  还没有你这么厉害 呵呵  共同进步
发表于 2014-5-30 15:17:36
回复 收藏
姜姜,个人比较闲,学习python中    

xfxdtt 发表于 2014-5-30 15:14
如果是跑排名,一个小时能跑多少?我的是pycurl一个小时两三千左右

没测试跑排名呢,刚好有个需求,写完了看看
 楼主| 发表于 2014-5-30 15:53:11
回复 收藏
姜姜,个人比较闲,学习python中    

didiaoxiaohu 发表于 2014-5-30 15:17
写的挺好 最近也在学python  还没有你这么厉害 呵呵  共同进步

共同进步
 楼主| 发表于 2014-5-30 15:53:54
回复 收藏
ZERO,SEO执着爱好者    

建议仅在有实际需求要解决的时候去研究技术,不然个人觉得容易重视了技术,忽视了SEO。

评分

参与人数 1赞同 +1 收起 理由
bobo1732 + 1 赞一个!

查看全部评分

发表于 2014-5-30 16:25:05
回复 收藏
方法,SEO狂热爱好者、折腾派    


兄弟,你也在这儿呢?
发表于 2014-5-30 16:28:55
回复 收藏
姜姜,个人比较闲,学习python中    

方法 发表于 2014-5-30 16:28
兄弟,你也在这儿呢?

必须在的
 楼主| 发表于 2014-5-30 16:55:00
回复 收藏
姜姜,个人比较闲,学习python中    

ZERO 发表于 2014-5-30 16:25
建议仅在有实际需求要解决的时候去研究技术,不然个人觉得容易重视了技术,忽视了SEO。 ...

恩,采集是替别人解决的。自己没那个需求,现在帮人写点需求,看看大家都用在哪些方面。
 楼主| 发表于 2014-5-30 16:55:44
回复 收藏
AIR_seoqx,希望在SEO前线的乐土中,真正享受SEO的滋润。    

恩,继续学习中,受教了
发表于 2014-5-30 17:47:19
回复 收藏
波波,seo爱好者    

目前也在学习python,不过自己也没那需求,只是为了打点基础,当用到了时候,再学就慢了,所以zero说等有实际需求再研究就慢了,学这些也是为了SEO,提高工作效率
发表于 2014-5-31 12:24:33
回复 收藏
bingyan,攻城师    

不管是查询也好,还是采集,这东西都非常不错
发表于 2014-6-1 07:25:18
回复 收藏
姜姜,个人比较闲,学习python中    

波波 发表于 2014-5-31 12:24
目前也在学习python,不过自己也没那需求,只是为了打点基础,当用到了时候,再学就慢了,所以zero说等有实 ...

恩,先学下基础吧,有了基础很多代码不必自己写,我们做seo需求也没必要向程序猿那样考虑太多程序问题,能找到代码,拼到一起,解决问题就行
 楼主| 发表于 2014-6-1 19:42:58
回复 收藏
姜姜,个人比较闲,学习python中    

bingyan 发表于 2014-6-1 07:25
不管是查询也好,还是采集,这东西都非常不错

恩,十分钟1万的那个网站没限制,其他站还是要解决下ip的问题
 楼主| 发表于 2014-6-1 19:44:51
回复 收藏
思明,技术宅男SEO之路    QQ:176089710    

之前用python+scrapy写过一个比价平台的采集器,确实是挺好用的,加上 redis 可以弄成分布式的 。

现在我对于需在重复性抓取或者需要调度功能的抓取才用scrapy,

一般情况下,直接 python + beautifulsoup  / 正则 就搞定了。
发表于 2014-6-3 19:25:42
回复 收藏
12下一页
快速回复 返回顶部 返回列表