您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Python Scrapy中限制每个站点的后续页面数

5b51 2022/1/14 8:20:43 python 字数 3062 阅读 465 来源 www.jb51.cc/python

我正在尝试构建一个可以有效地从许多网站上抓取文本信息的蜘蛛.由于我是Python用户,我被提到了Scrapy.但是,为了避免抓取大型网站,我想限制蜘蛛每个网站不超过20页的某个“深度”.这是我的蜘蛛:class DownloadSpider(CrawlSpider): name = 'downloader' download_path = '

概述

我正在尝试构建一个可以有效地从许多网站上抓取文本信息的蜘蛛.由于我是Python用户,我被提到了Scrapy.但是,为了避免抓取大型网站,我想限制蜘蛛每个网站不超过20页的某个“深度”.这是我的蜘蛛:

class DownloadSpider(CrawlSpider):
    name = 'downloader'
    download_path = '/home/MyProjects/crawler'
    rules = (Rule(SgmlLinkExtractor(),callback='parse_item',follow=True),)

    def __init__(self,*args,**kwargs):
        super(DownloadSpider,self).__init__(*args,**kwargs)
        self.urls_file_path = [kwargs.get('urls_file')]
        data = open(self.urls_file_path[0],'r').readlines()
        self.allowed_domains = [urlparse(i).hostname.strip() for i in data] 
        self.start_urls = ['http://' + domain for domain in self.allowed_domains]

    def parse_start_url(self,response):
        return self.parse_item(response)

    def parse_item(self,response):
        self.fname = self.download_path + urlparse(response.url).hostname.strip()
        open(str(self.fname)+ '.txt','a').write(response.url)
        open(str(self.fname)+ '.txt','a').write('\n')

urls_file是带有url的文本文件的路径.我还在设置文件中设置了最大深度.这是我的问题:如果我设置CLOSESPIDER_PAGECOUNT异常,它会在抓取页面总数(无论哪个站点)达到异常值时关闭蜘蛛.但是,当我从每个网址上说20页时,我需要停止抓取.
我也尝试使用像self.parsed_number = 1这样的变量保持计数,但这也不起作用 – 似乎scrapy不会通过url进行url但是将它们混合起来.
任何建议都非常感谢!

这就是我想象的 – 应该在理论上运作.如果您需要一个例子,请告诉我.

仅供参考,您可以在urlparse.urlparse的帮助下提取基本网址并计算深度(请参阅docs).

总结

以上是编程之家为你收集整理的如何在Python Scrapy中限制每个站点的后续页面数全部内容,希望文章能够帮你解决如何在Python Scrapy中限制每个站点的后续页面数所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶