我试图抓住分页网,但它给了我第一个 每次迭代中的页面。当我在浏览器中单击它时, 内容不同。
!pip install --upgrade sklearn
这是输出:
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
第2页的传呼机项目(以及类似的3,4,......)如下所示
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
当我在浏览器中打开URL(通过点击或通过地址栏)并通过代码获取URL时,为什么生成的页面会有所不同?
答案 0 :(得分:1)
您正在向“片段标识符”添加文字(即在#之后),请参阅https://www.w3.org/DesignIssues/Fragment.html
片段标识符是在哈希之后的URI之后的字符串,其标识作为文档的函数的特定内容。对于用户界面Web文档(如HTML poage),它通常标识部件或视图。例如在对象
中
片段标识符在取消引用之前与URI的其余部分分开,因此片段本身内的标识信息仅由用户代理解除引用,而不管URI方案如何。虽然这种单独处理通常被认为是信息丢失,特别是随着资源随时间推移而对参考文献进行精确重定向,但它也有助于防止信息提供者拒绝参考作者有选择地引用资源内的信息。间接引用还为使用URI的系统提供了额外的灵活性和可扩展性,因为新媒体类型比新的识别方案更容易定义和部署。
因此,您要将索引添加到未发送到服务器的URL的一部分。仅供客户端使用“仅由用户代理取消引用”。服务器每次迭代都会看到相同的URL。
页面最有可能呈现的方式是有一些JavaScript读取片段标识符并发出另一个请求来获取数据或确定要显示的数据部分。
我建议使用Live HTTP Headers或其他工具检查页面发出的所有请求,看看是否有第二个请求可以使用或使用像Selenium,dryscrape或PyQT5这样的JavaScript呈现技术,请参阅我对{{{ 3}}了解详情。