Scrapy linkextractor忽略符号#后面的参数,因此不会跟随链接

Scrapy linkextractor忽略符号#后面的参数,因此不会跟随链接,scrapy,Scrapy,我正试图用scrapy在一个网站上爬行,该网站的页码位于“#”标志后面。这使得scrapy忽略了该角色背后的所有内容,它总是只看到第一页 e、 g: 如果手动输入问号,网站将加载第1页 scrapy的统计数据告诉我它获得了第一页: 调试:已爬网(200)http://www.rolex.de/de/watches/datejust/m126334-0014.html>(参考: ) 我的爬虫看起来像这样: start_urls = [ 'http://www.rolex.de/de/w

我正试图用scrapy在一个网站上爬行,该网站的页码位于“#”标志后面。这使得scrapy忽略了该角色背后的所有内容,它总是只看到第一页

e、 g:

如果手动输入问号,网站将加载第1页

scrapy的统计数据告诉我它获得了第一页:

调试:已爬网(200)http://www.rolex.de/de/watches/datejust/m126334-0014.html>(参考: )

我的爬虫看起来像这样:

start_urls = [
    'http://www.rolex.de/de/watches/find-rolex.html#g=1',
    'http://www.rolex.de/de/watches/find-rolex.html#g=0&p=2',
    'http://www.rolex.de/de/watches/find-rolex.html#g=0&p=3',
]

rules = (
    Rule(
        LinkExtractor(allow=['.*/de/watches/.*/m\d{3,}.*.\.html']), 
        callback='parse_item'
    ),       
    Rule(
        LinkExtractor(allow=['.*/de/watches/find-rolex(/.*)?\.html#g=1(&p=\d*)?$']), 
        follow=True
    ),
)

如何使scrapy忽略url中的#并访问给定的url?

scrapy执行HTTP请求。URL中“#”之后的数据不是HTTP请求的一部分,它由JavaScript使用

正如评论中所建议的,站点使用AJAX加载数据

此外,它没有在AJAX中使用分页:该站点在一个请求中将整个手表列表作为JSON下载,然后使用JavaScript完成分页

因此,您只需使用web浏览器的开发者工具的网络选项卡来查看获取JSON数据的请求,并执行类似的请求,而不是请求HTML页面


但是,请注意,不能对JSON数据使用
LinkExtractor
。您只需使用Python的
json
解析响应,并在那里迭代URL。

打印结果页面的源代码,查看HTML是否可用,或者您所需的数据是否已加载到Ajax上。谢谢。我就是这样做的。