5

我正在尝试在 scrapy 中获取最终重定向的 URL。例如,如果锚标记具有特定格式:

<a href="http://www.example.com/index.php" class="FOO_X_Y_Z" />

然后我需要获取 URL 重定向到的 URL(如果是,如果是 200 则 OK)。例如,我得到适当的锚标签,如下所示:

def parse (self, response)  
    hxs     = HtmlXPathSelector (response);
    anchors = hxs.select("//a[@class='FOO_X_Y_Z']/@href");

    // Lets assume anchor contains the actual link (http://...)
    for anchor in anchors:
        final_url = get_final_url (anchor);   // << I would need something like this

        // Save final_url

因此,如果我访问了http://www.example.com/index.php,那将通过 10 次重定向发送给我,最后它会停止http://www.example.com/final.php- 这就是我需要get_final_url()返回的内容。

我想破解我的解决方案,但我在这里问scrapy是否已经提供了一个?

4

3 回答 3

3

同样,假设anchor包含一个实际的 URL,我用urllib2完成了它:

def parse (self, response)  
    hxs     = HtmlXPathSelector (response);
    anchors = hxs.select("//a[@class='FOO_X_Y_Z']/@href");

    // Lets assume anchor contains the actual link (http://...)
    for anchor in anchors:
        final_url = urllib2.open(anchor, None, 1).geturl()

        // Save final_url

urllib2.open()返回一个带有两个附加方法的类文件对象,其中一个是geturl()返回最终 URL(在所有重定向之后)。它不是 Scrapy 的一部分,但它可以工作。

于 2012-10-10T08:29:40.360 回答
0

我使用response.headers它将返回一个信息列表。新的 url 值位于“Location”键旁边。

In [1]: response.headers
Out[1]: 
{'Date': 'Thu, 09 Jun 2016 00:18:18 GMT',
 'Location': 'https:/www.protiviti.com/en-US/Pages/default.aspx',
 'Server': 'nginx/1.9.1',
 'X-Ms-Invokeapp': '1; RequireReadOnly'}
于 2016-06-09T00:04:59.757 回答
-4

这很简单:

print response.url #(inside parse() )
于 2012-10-07T15:30:32.763 回答