如何避免scrapy忽略哈希标记

时间:2012-06-18 09:50:25

标签: python url scrapy

我正在研究scrapy

我有一个包含哈希标记的网站,但是当我运行它时,scrapy通过忽略哈希标记来下载响应

例如,这是包含hash fragmentsurl="www.example.com/hash-tag.php#user_id-654"的网址 并且此请求的响应仅为www.example.com/hash-tag.php,但我想用哈希片段抓取url。

我的代码在

下面
 class ExampleSpider(BaseSpider):
     name = "example"
     domain_name = "www.example.com"


    def start_requests(self):
            return Request("www.example.com/hash-tag.php#user_id-654")    


    def parse(self):
           print response 

结果:

<GET www.example.com/hash-tag.php>

我怎么能这样做...... 提前致谢................

2 个答案:

答案 0 :(得分:0)

你想要做的事情并不容易。要实现您的目标,您需要一个完整的DOM和JavaScript引擎,即(可能是无头的)浏览器。

如果您确实需要它,请查看PhantomJS。它是WebKit引擎,但完全无头。我不确定scrapy是否可以轻松扩展,但如果你真的想要执行JavaScript(在这种情况下你需要),使用PhantomJS可能就是这样。

答案 1 :(得分:0)

如果您真的需要这些信息,您可以在调用Request之前先拆分字符串,然后将该信息作为元发送。

这样的东西
url = "www.example.com/hash-tag.php#user_id-654"
hash = url.split("#")[1]

request = Request(url, callback=self.parse_something)
request.meta['after_hash'] = hash
yield request

然后解析get并像

一样使用它
def parse_something(self, response):
     hash = response.meta['after_hash']

即如果你只是在哈希标志后需要这些信息。