scrapy:如何在URL中包含主题标签

时间:2019-03-10 22:31:49

标签: character-encoding scrapy url-encoding

我的网址格式为

url = "http://www.example.com/search.html#query=test"

将其传递给scrapy.Request为

yield scrapy.Request(url, self.parse_result)

像这样在parse_result中捡起来

def parse_result(self, response):
    print(response.url)

字符串中的最后一位总是被剥离,并打印如下

http://www.example.com/search.html

要从response.url意思是包括#query=test的部分完全提取字符串,我需要做什么?尝试使用%23代码而不是井号,但这只是作为数字而不是井号来传递。并使用

urllib.parse.quote(url)

创建值错误:

ValueError: Missing scheme in request

1 个答案:

答案 0 :(得分:0)

Peter,问题是服务器永远不会获得hash(或片段标识符,也就是所谓的片段标识符)。根据{{​​3}},“其处理完全在客户端”。

在您的情况下,这意味着网页上有一些JS将在页面加载后提取哈希,对其进行处理并将页面置于实际状态。开箱即用的Scrapy无法执行JS。因此,您在这里有一些选择:

  • 检查浏览器的Network标签,并尝试查看浏览器是否发出任何XHR / Ajax请求。如果是,则其中可能包含您需要抓取的信息。
  • 如果浏览器未发出ajax / xhr请求,则可能所有必需的信息已经在您从服务器获得的HTML响应中。它可能在html标记数据属性中,在隐藏的块中等等。尝试搜索html响应(不要使用Inspect Element-在JS处理后将向您显示html。相反,请使用View page source-将显示服务器已向您发送的邮件)。
  • 有多种使用Scrapy执行JS的方法-https://en.wikipedia.org/wiki/Fragment_identifier,但是与简单的服务器端处理相比,它需要高级设置和更多的工作。