Scrapy,URL上的哈希标记

时间:2011-07-07 00:51:49

标签: 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%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>

这确实影响了我的报废,因为经过几个小时试图找出为什么没有选择某个项目,我意识到长网址提供的HTML与短网站提供的HTML不同。此外,经过一些观察,内容在一些关键部分发生了变化。

有没有办法修改此行为,以便Scrapy保留整个URL?

感谢您的反馈和建议。

3 个答案:

答案 0 :(得分:10)


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

在浏览器中获取页面时可能发生的情况是页面包含一些查看片段标识符的JavaScript,并通过AJAX加载一些其他数据并更新页面。您需要查看浏览器的功能并查看是否可以模拟它 - 像Firebug或Chrome或Safari检查器这样的开发人员工具可以轻松实现。

例如,如果您导航到http://twitter.com/also,则系统会将您重定向到http://twitter.com/#!/also。此处浏览器加载的实际URL仅为http://twitter.com/,但该页面会加载用于生成页面的数据(http://twitter.com/users/show_for_profile.json?screen_name=also),在这种情况下,只是您可以解析的JSON数据你自己。您可以使用Chrome中的网络检查器查看这种情况。

答案 1 :(得分:1)

看起来不可能。问题不在于响应,而是在请求中,它会切断网址。

  

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

Can I read the hash portion of the URL on my server-side application (PHP, Ruby, Python, etc.)?

如果服务器没有从浏览器接收到这个部分,为什么还需要剥离这部分? 如果您正在使用亚马逊 - 我没有看到任何有关此类网址的问题。

答案 2 :(得分:0)

实际上,在Web浏览器中输入该URL时,它也只会将散列标记之前的部分发送到Web服务器。如果内容不同,可能是因为页面上有一些javascript - 根据哈希标记部分的内容 - 在加载之后更改页面的内容(很可能是制作XmlHttpRequest以加载其他内容。)