python+scrapy采集爱站关键词,用到的知识点有scrpy,re这两个模块,因为已经有一篇文章用xpath的方式去提取内容,所以这次就用下正则表达式python中re这个模块;
Scrapy这个库有点复杂,新手建议从urllib,requests这些库开始,我下面的代码页只是简单运用一下,Scrapy可以使用用UA池,ip池,禁止cookies,下载延迟,Google cache,分布式爬取等强大仿被ban策略。
#encoding=utf-8 #在所有工作之前,先用scrapy startproject projectname,这时会生成一个叫projectname的文件夹 from scrapy.spiders import Spider #导入模块 from scrapy.selector import Selector from scrapy.linkextractors import LinkExtractor from scrapy.http import Request import re class cispider(Spider): #面向对象中的继承类 name='ciku' #如果是win7运行的时候在你创建projectname的目录下面通过cmd,敲上scrapy crawl ciku来运行 start_urls=['https://ci.aizhan.com/seo/'] #目标网站 def parse(self,response): #类的方法 html=response.body r=re.compile(r'<td class="blue t_l"><a href="https://www\.baidu\.com/baidu.*?" target="_blank" rel="nofollow">(.*?)</a></td>[\s\S]*?<td align="right">(\d+)</td>') a=re.findall(r,html) #提取正则 for i in a: f=','.join(i) w=re.compile('<font color="#FF0000">|</font>') b = w.sub('',f).decode('utf-8').encode('gbk') #解决win7下的编码问题 print b b=re.compile(r'页号:<a class="on">1</a> <a href="(.*?)">2</a> ') urls=re.findall(b,html) for n in urls: c='https://ci.aizhan.com' f=c+n print f yield Request(f,callback=self.parse) #回调,这里大概的过程就是将页码,翻页数,如第二页,第三页等返回给self.pase()来获取内容关键词