python 使用scrapy 分布式爬取

创建工程忽略

在setting.py中添加

#增加了一个去重容器类的配置,作用使用Redis的set集合来存储指纹数据,从而实现去重持久化
DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPDupeFilter"
#使用scrapy_redis组件自己调度器
SCHEDULER="scrapy_redis.scheduler.Scheduler"
#配置调度器是否持久化,也就是当爬虫结束了 要不要清空Redis中请求队列和去重指纹的set
#True表示今天爬过了 明天就不爬重复
SCHEDULER_PERSIST=True

ITEM_PIPELINES={
    'scrapy_redis.pipelines.RedisPipeline':400
}
#存储到Redis中
REDIS_HOST="127.0.0.1"
REDIS_PORT=6379

在爬虫文件写入

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy_redis.spiders import RedisCrawlSpider
from fbsPro.items import FbsproItem

class FbsSpider(RedisCrawlSpider):
    name = "fbs"
    # allowed_domains = ["www.xxx.com"]
    # start_urls = ["https://www.xxx.com"]
    redis_key = 'sanQuqu' #可以被共享的调度器名字
    rules = (Rule(LinkExtractor(allow=r"id=1&page=\d+"), callback="parse_item", follow=True),)

    def parse_item(self, response):
        li_list=response.xpath('/html/body/div[2]/div[3]/ul[2]/li')
        for li in li_list:
            title=li.xpath('./span[3]/a/text()').extract_first()
            item=FbsproItem()
            item['title']=title
            yield item
  #需要重写方法 
    def make_requests_from_url(self, url):
        yield scrapy.Request(url=url)

运行爬虫文件

运行后等待手动在Shell窗口输入Url

然后打开Redis安装目录

右键打开Shell窗口

输入指令 redis-server

打开客户端 redis-cli

这个是上面的代码 “” redis_key = 'sanQuqu' #可以被共享的调度器名字“”

输入 lpush sanQuqu 这里输入要爬取的url

按下回车在pycharm中就可以看到爬取的数据

猜你喜欢

转载自blog.csdn.net/qq1278169704/article/details/131118926