2

我试图从网页中获取一些数据,但我发现了一个问题。每当我想转到下一页(即第 2 页)以继续检索其中的数据时,我一直从第 1 页接收数据。显然在尝试切换到下一页时出现了问题。

问题是,我没有遇到这样的网址问题:

'http://www.webpage.com/index.php?page=' + str(pageno)

我可以开始一个 while 语句,然后通过将 1 添加到“pageno”来跳转到第 2 页

当我尝试使用这种格式打开一个 url 时,我的问题就出现了:

'http://www.webpage.com/search/?show_all=1#sort_order=ASC&page=' + str(pageno)

作为

urllib2.urlopen('http://www.webpage.com/search/?show_all=1#sort_order=ASC&page=4').read()

将从http://www.webpage.com/search/?show_all=1检索源代码

就我而言,没有其他方法可以在不使用哈希的情况下检索其他页面。

我想这只是 urllib2 忽略了哈希,因为它通常用于指定浏览器的起点。

4

2 回答 2

5

哈希 (#) 符号后面的 URL 片段用于客户端处理,实际上并未发送到 Web 服务器。我的猜测是页面上有一些 javascript 使用 AJAX 从服务器请求正确的数据,您需要弄清楚用于此目的的 URL。

如果您使用 chrome,您可以查看开发人员工具的“网络”选项卡,并查看当您单击链接转到浏览器中的第二页时请求的 URL。

于 2012-08-15T12:07:52.203 回答
1

这是因为哈希不是发送到服务器的 url 的一部分,它是一个片段标识符,用于识别页面内的元素。不过,一些网站滥用 JavaScript 挂钩的哈希片段来识别页面。您要么需要能够在页面上执行 JavaScript,要么需要对 JavaScript 进行逆向工程并模拟正在发出的真实搜索请求,大概是通过 ajax。Firebug 的 Net 选项卡对此非常有用。

于 2012-08-15T12:11:23.680 回答