我想从这个网站上搜集裙子的信息:https://www.libertylondon.com/uk/department/women/clothing/dresses/
显然,我不仅对前60个结果感兴趣,而且对所有结果都感兴趣。当我点击“显示更多”按钮几次时,我看到了这个网址:https://www.libertylondon.com/uk/department/women/clothing/dresses/#sz=60&start=300
我本以为使用下面的代码,我可以得到上面提到的页面的完整下载,但由于某些原因,它仍然只能产生前60个结果。你知道吗
import requests
import bs4
url = "https://www.libertylondon.com/uk/department/women/clothing/dresses/#sz=60&start=300"
res = requests.get(url)
res.encoding = 'utf-8'
res.raise_for_status()
html = res.text
soup = bs4.BeautifulSoup(html, "lxml")
elements = soup.find_all("div", attrs = {"class": "product product-tile"})
我可以看到问题出在请求本身,因为soup
变量不包含我在检查页面时看到的完整html文本,但我不明白这是为什么。你知道吗
单击“显示更多”按钮后显示的链接使用片段(注意
#
符号)。这不是发送到服务器的内容,而是由JavaScript在前端用来加载更多的项目,而无需重新加载整个页面。你知道吗但是,您很幸运,因为如果您查看浏览器控制台中发出的HTTP请求,您将看到它向
https://www.libertylondon.com/uk/department/women/clothing/dresses/?sz=60&start=60
发出请求。这些是查询参数(似乎与片段完全匹配!),这意味着服务器将发送额外的项目。你知道吗试试下面的网址,它可以给你331个元素。你知道吗
我认为在这种情况下,按钮“显示更多”,从第
*from*
条裙子加载*sz*
条裙子。你知道吗因此,当您使用
#sz=60&start=300
属性执行http请求时,数据库将只获取索引300到360之间的地址,这就是为什么请求只包含60个地址的原因。你知道吗页面上还有一个按钮指示另一个url:全部显示,这个按钮给出这个url:
https://www.libertylondon.com/uk/department/women/clothing/dresses/?sz=120
只需使用
?sz=120
url参数,就可以得到sz
个连衣裙的答案。但你一次能装多少件衣服似乎是有限制的。你知道吗相关问题 更多 >
编程相关推荐