Scrapy 刮痕:超出初始位置的爬行

Scrapy 刮痕:超出初始位置的爬行,scrapy,scrapy-spider,Scrapy,Scrapy Spider,我试图构建一个非常简单的爬虫程序,从一个站点开始,不仅爬虫该站点,还爬虫外部链接(最终从起始站点分支出n个站点)。目前,它确实命中了外部链接并拉入了第一个链接页面,但我不能让它超出这个范围 这是我现在的蜘蛛: import scrapy import json from seocrawler.items import SeocrawlerItem from scrapy.contrib.spiders import CrawlSpider class SeocrawlerSpider(Craw

我试图构建一个非常简单的爬虫程序,从一个站点开始,不仅爬虫该站点,还爬虫外部链接(最终从起始站点分支出n个站点)。目前,它确实命中了外部链接并拉入了第一个链接页面,但我不能让它超出这个范围

这是我现在的蜘蛛:

import scrapy
import json
from seocrawler.items import SeocrawlerItem
from scrapy.contrib.spiders import CrawlSpider

class SeocrawlerSpider(CrawlSpider):
    name = "seocrawler_spider"
    start_urls =  ['http://www.example.com/']

    def parse(self, response):
        for href in response.css("a::attr('href')"):
            url = response.urljoin(href.extract())
            yield scrapy.Request(url, callback=self.parse_page)

        next_url = response.css(
            "a::attr('href')"
            ).extract_first()
            if next_url:
                yield scrapy.Request(next_url, callback=self.parse) 

    def parse_page(self, response):
        item = SeocrawlerItem()
        item['page_link'] = response.url
        item['page_title'] = response.xpath('/html/head/title/text()').extract()
        item['page_meta_description'] = response.xpath('/html/head/meta[@name="description"]/@content').extract()
        item['page_h1'] = response.xpath('//h1/text()').extract()
        yield item
我尝试将
深度限制设置为0和一个较高的数字,但似乎没有影响它<代码>请求\u深度\u最大值
无论发生什么情况都报告为1


我在这里遗漏了什么?

使用
scrapy.Spider
而不是
CrawlSpider
我实际上已经试过了(可能应该提到这一点);似乎没有任何区别。您是否可以检查日志并确认DupeFilter没有筛选出请求,也可以尝试使用dont_filter=True并查看是否存在此问题works@MrPandav,我尝试了
don\u filter=True
,还添加了
DUPEFILTER\u CLASS='scrapy.DUPEFILTER.BaseDupeFilter'
。它会抓取
start\u url
的站点,以及该起始域的外部域的第一个链接,但不会更深。添加这两个设置只会让它一遍又一遍地抓取所有内容,但它永远不会超过外部链接的第一个链接。您是否检查了日志,
next\u url=response.css(“a::attr('href'))。extract\u first()
每次您请求时,此代码必须访问相同的第一个url…例如主页或其他内容,您需要一些逻辑来确保它不会总是访问相同的页面使用
scrapy.Spider
而不是
CrawlSpider
我实际上已经尝试过了(可能应该提到这一点);似乎没有任何区别。您是否可以检查日志并确认DupeFilter没有筛选出请求,也可以尝试使用dont_filter=True并查看是否存在此问题works@MrPandav,我尝试了
don\u filter=True
,还添加了
DUPEFILTER\u CLASS='scrapy.DUPEFILTER.BaseDupeFilter'
。它会抓取
start\u url
的站点,以及该起始域的外部域的第一个链接,但不会更深。添加这两个设置只会让它一遍又一遍地抓取所有内容,但它永远不会超过外部链接的第一个链接。您是否检查了日志,
next\u url=response.css(“a::attr('href'))。extract\u first()
每次您请求时,此代码必须访问相同的第一个url…例如主页或其他内容,您需要一些逻辑来确保它不总是访问相同的页面