【问题标题】:Pagination giving the first page in every iteration分页在每次迭代中给出第一页
【发布时间】:2018-01-19 05:09:21
【问题描述】:

我正在尝试抓取分页网页,但它给了我第一个 每次迭代中的页面。当我在浏览器中单击它时, 内容不同。

url = "http://www.x.y/z/a-b#/page-%s"

for i in range(1, 10):
  url2 = url % str(i)
  soup = urlToSoup(url2)
  print url2
  # url2 changes in every iteration
  # Here it will print the same product list in every iteration

这是输出:

http://www.x.y/z/a-b#/page-1
http://www.x.y/z/a-b#/page-2
http://www.x.y/z/a-b#/page-3
http://www.x.y/z/a-b#/page-4
http://www.x.y/z/a-b#/page-5
http://www.x.y/z/a-b#/page-6
http://www.x.y/z/a-b#/page-7
http://www.x.y/z/a-b#/page-8
http://www.x.y/z/a-b#/page-9

第 2 页(以及类似的 3、4、...)的分页器项如下所示

<a rel="nofollow" href="http://www.x.y/z/a-b#/page-2"> <span>2</span> </a>

为什么当我在浏览器中打开 URL(通过点击或通过地址栏)和通过代码获取时结果页面不同?

【问题讨论】:

  • 您正在重用url 变量,因此第二次循环时,您没有将%s 替换为str(i)。但这应该会导致错误,你没有得到一个吗?
  • @PauloAlmeida “每次迭代中的 url 都会改变”。如果没有,这太容易了。 (这就是我打印它的原因,可以肯定)。
  • 我不确定我是否理解。 url 以上述代码中未描述的方式发生变化?那么具体情况如何变化呢?
  • @PauloAlmeida 你说得对。我不知道,我怎么能忽略它。我将在循环中使用另一个变量。我将删除问题。谢谢。
  • @PauloAlmeida 最后,我宁愿编辑了这个问题,因为问题仍然存在,尽管 url2 发生了变化。 (第一次,我使用了 urlToSoup(url % str(i))),而不是出于提问目的而更改了它,并犯了您在第一条评论中注意到的错误。所以,我们可以删除所有的 cmets 并重新开始。

标签: python pagination beautifulsoup


【解决方案1】:

您正在向“片段标识符”(即 # 之后)添加文本,请参阅 https://www.w3.org/DesignIssues/Fragment.html

片段标识符是 URI 之后的字符串,在哈希之后,它标识作为文档函数的特定内容。对于诸如 HTML poage 之类的用户界面 Web 文档,它通常标识一个部件或视图。例如在对象中

RFC3986 说

片段标识符在解引用之前与 URI 的其余部分分开,因此片段本身的标识信息仅由用户代理解引用,而与 URI 方案无关。尽管这种单独的处理通常被认为是信息的丢失,特别是随着资源随着时间的推移而准确地重定向参考文献,但它也有助于防止信息提供者拒绝参考作者有选择地参考资源中的信息的权利。间接引用还为使用 URI 的系统提供了额外的灵活性和可扩展性,因为新的媒体类型比新的标识方案更容易定义和部署。

因此,您将索引添加到未发送到服务器的 URL 的一部分。它仅供客户端使用“仅由用户代理取消引用”。服务器每次迭代都会看到相同的 URL。

页面最有可能呈现的方式是有一些 JavaScript 读取片段标识符并发出另一个请求以获取数据或确定要显示的数据的哪一部分。

我建议使用 Live HTTP Headers 或其他工具检查页面发出的所有请求,看看是否有第二个请求可以利用或使用 JavaScript 呈现技术,如 Selenium、dryscrape 或 PyQT5,请参阅我对 @987654323 的回答@了解详情。

【讨论】:

  • 是的,有一些 Javascript 事件(在 Firebug 中)。
猜你喜欢
  • 2016-08-10
  • 2016-04-13
  • 1970-01-01
  • 2011-10-31
  • 2021-10-28
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多