相关疑难解决方法(0)

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

我正在尝试构建一个可以有效地从许多网站上抓取文本信息的蜘蛛.由于我是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')
Run Code Online (Sandbox Code Playgroud)

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

python web-crawler scrapy

6
推荐指数
2
解决办法
3957
查看次数

Scrapy XPath页面上的所有链接

我正在尝试使用Scrapy收集域下的所有URL。我试图使用CrawlSpider从首页开始抓取他们的网站。对于每个页面,我想使用Xpath提取所有href。并以键/值对之类的格式存储数据。

密钥:当前网址值:此页面上的所有链接。

class MySpider(CrawlSpider):
    name = 'abc.com'
    allowed_domains = ['abc.com']
    start_urls = ['http://www.abc.com']

    rules = (Rule(SgmlLinkExtractor()), )
    def parse_item(self, response):
        hxs = HtmlXPathSelector(response)
        item = AbcItem()
        item['key'] = response.url 
        item['value'] = hxs.select('//a/@href').extract()
        return item 
Run Code Online (Sandbox Code Playgroud)

我定义我的AbcItem()如下所示:

从scrapy.item导入项目,字段

class AbcItem(Item):

    # key: url
    # value: list of links existing in the key url
    key = Field()
    value = Field()
    pass
Run Code Online (Sandbox Code Playgroud)

当我像这样运行我的代码时:

nohup scrapy crawl abc.com -o output -t csv &
Run Code Online (Sandbox Code Playgroud)

机器人似乎开始爬行,我可以看到所有配置日志都在填充nohup.out文件,但是输出文件中没有信息。这是我要收集的内容,有人可以帮助我吗?我的机器人可能出了什么问题?

python xpath scrapy

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×2

scrapy ×2

web-crawler ×1

xpath ×1