Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python URL上的碎片、散列标签_Python_Url_Web Scraping_Scrapy - Fatal编程技术网

Python URL上的碎片、散列标签

Python URL上的碎片、散列标签,python,url,web-scraping,scrapy,Python,Url,Web Scraping,Scrapy,我正在使用Scrapy进行一个废弃项目 我意识到Scrapy将URL从散列标签一直剥离到最后 以下是shell的输出: [s] request <GET http://www.domain.com/b?ie=UTF8&node=3006339011&ref_=pe_112320_20310580%5C#/ref=sr_nr_p_8_0?rh=n%3A165796011%2Cn%3A%212334086011%2Cn%3A%212334148011%2Cn%3A30

我正在使用Scrapy进行一个废弃项目

我意识到Scrapy将URL从散列标签一直剥离到最后

以下是shell的输出:

[s]   request    <GET http://www.domain.com/b?ie=UTF8&node=3006339011&ref_=pe_112320_20310580%5C#/ref=sr_nr_p_8_0?rh=n%3A165796011%2Cn%3A%212334086011%2Cn%3A%212334148011%2Cn%3A3006339011%2Cp_8%3A2229010011&bbn=3006339011&ie=UTF8&qid=1309631658&rnid=598357011>
[s]   response   <200 http://www.domain.com/b?ie=UTF8&node=3006339011&ref_=pe_112320_20310580%5C>
[s]请求
[s] 回应
这确实影响了我的放弃,因为在花了几个小时试图找出某些项目没有被选中的原因后,我意识到长URL提供的HTML与短URL提供的HTML不同。此外,经过一些观察,一些关键部分的内容发生了变化

有没有办法修改这个行为,让Scrapy保留整个URL


感谢您的反馈和建议。

实际上,在web浏览器中输入该URL时,它也只会将哈希标记之前的部分发送到web服务器。如果内容不同,可能是因为页面上存在一些javascript,这些javascript基于哈希标记部分的内容,在页面加载后更改了页面的内容(很可能是进行了XmlHttpRequest以加载其他内容)。


这不是scrapy本身可以改变的——url中哈希后面的部分是客户端(这里是scrapy,通常是浏览器)而不是服务器使用的

在浏览器中获取页面时可能发生的情况是,页面包含一些JavaScript,这些JavaScript查看片段标识符,并通过AJAX加载一些附加数据并更新页面。您需要了解浏览器的功能,看看是否可以模仿它——Firebug、Chrome或Safari inspector等开发工具可以让这变得简单


例如,如果导航到,则会重定向到。浏览器在这里加载的实际URL只是,但该页面随后加载用于生成页面的数据(),在本例中,它只是您可以自己解析的JSON数据。您可以使用Chrome中的网络检查器看到这种情况。

看起来这是不可能的。问题不在于响应,而在于请求中,请求会删除url

它可以从Javascript-as中检索 window.location.hash。从那里你 可以使用Ajax将其发送到服务器 例如,或者将其编码并放入 进入可以传递的URL 到服务器端

如果服务器没有从浏览器接收到该部件,为什么需要将其剥离?
如果您使用的是亚马逊-我没有发现此类URL有任何问题。

多亏了您的回答,我才能够了解URL中此哈希标记背后的概念。基本上,如@所述,JAX请求生成一个响应,在我的例子中是JSON,我必须解析它。下面的例子清楚地说明了这个问题。以下是一些有帮助的文档,供进一步参考:您是否找到了解决方案?我发现一个案例,没有哈希标记的URL对折扣产品应用了一种过滤器,因此列出的产品较少。然后您要么没有解决方案,要么尝试提出其他请求。找到发出请求的算法并发出请求。可以使用Selenium来执行JavaScript代码,但是,片段标识符会从所有请求中剥离。问题仍然是:如何生成包含片段标识符的请求?我可以将其包含在meta字段中,但Scrapy只会加载一个这样的页面,因为它会过滤出具有重复URL的请求。