Scrapy爬虫框架获取爱站词库

python scrapy
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>&nbsp;<a href="(.*?)">2</a>&nbsp')
        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()来获取内容关键词

Leave a Comment