Scrapy 刮痕:超出初始位置的爬行
我试图构建一个非常简单的爬虫程序,从一个站点开始,不仅爬虫该站点,还爬虫外部链接(最终从起始站点分支出n个站点)。目前,它确实命中了外部链接并拉入了第一个链接页面,但我不能让它超出这个范围 这是我现在的蜘蛛: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
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…例如主页或其他内容,您需要一些逻辑来确保它不总是访问相同的页面