我很困惑,无法弄清楚为什么我的CrawlSpider无法在HTML代码中拾取和处理相关链接。
下面是一个cawlspider,我可以从命令行传递一些参数,如下所示:
scrapy crawl domain_spider -a url="https://djangosnippets.org/snippets/?page=15" -s ROBOTSTXT_OBEY=0 -s AUTOTHROTTLE_ENABLED=0
蜘蛛运行并绝对拒绝抓取列表中的分页页面。 HTML看起来像这样:
<a href="?page=5">< Previous 20</a>
如果我从-a allowed="page="
这样的commans中传入params,那么它会再拾取两页,但它仍然拒绝继续。
有人能在我的代码中发现问题吗?
我的CrawlSpider :
def __init__(self, url=None, category='default', allowed=None, denied=None, single_page=False, **kwargs):
self.category = category
if allowed == '':
allowed = None
if denied == '':
denied = None
if single_page is not False and single_page != '':
denied = '.*'
self.start_urls = ['{}'.format(url)]
self.allowed_domains = [urlparse(url).netloc]
self.domain = urlparse(url).netloc
self.rules = (
Rule( LinkExtractor(allow=allowed, deny=denied, unique=True), callback='parse_page' ),
)
super(DomainSpider, self).__init__(**kwargs)
答案 0 :(得分:0)
好的,所以我很高兴能够为自己这么快回答这个问题。
如果将CrawlSpider与规则一起使用并定义回调(就像我一样),那么如果希望它继续使用蜘蛛页面,则必须将follow=True
添加到规则中。否则,您将需要来自回调的yield
个请求。因此,下面是修复的前/后,这将使CrawlSpider跟随链接。
<强>之前强>
Rule(
LinkExtractor(allow=allowed, deny=denied, unique=True),
callback='parse_page'
),
<强>后强>
Rule(
LinkExtractor(allow=allowed, deny=denied, unique=True),
callback='parse_page',
follow=True
),