我目前正在开展一个用于webscraping的学习项目 我选择了我的网站:
在此页面上,底部有一个按钮,显示下一个10个产品的列表,没有点击此按钮,它不显示下一批产品,但点击按钮时URL不会改变。
我想问一下如何使用请求模块解决这个难题。
我的代码如下:
import requests
from bs4 import BeautifulSoup
r = requests.get("https://www.game.co.uk/en/m/games/best-selling-games/best-selling-xbox-one-games/?merchname=MobileTopNav-_-XboxOne_Games-_-BestSellers")
c = r.content
soup = BeautifulSoup(c,"html.parser")
all=soup.find_all("div",{"class":"product"})
for item in all:
print(item.find({"h2": "productInfo"}).text.replace('\h2','').replace(" ", ""))
print(item.find("span",{"class": "condition"}).text + " " + item.find("span",{"class": "value"}).text )
try:
print(item.find_all("span",{"class": "condition"})[1].text + " " + item.find_all("span",{"class": "value"})[1].text )
except:
print("No Preowned")
print(" ")
答案 0 :(得分:0)
你需要使用支持javascript / jquery执行的webcrawler - 即selenium(它在引擎盖下使用BoutifulSoup) 您遇到的问题是,当您单击提到的按钮时,您尝试访问的内容将通过javascript动态创建。 当您请求页面时,不会创建您想要读取的其他html元素,因此BoutifulSoup无法找到它们。 使用selenium,您可以单击按钮/填写表单等等。您还可以等待服务器创建您要访问的内容。
selenium的文档应该是自我解释......
答案 1 :(得分:0)
尝试使用此代码获取该页面中的所有可用项目。您可以使用chrome dev工具来检索this url,其中有一个页码增量选项。
from bs4 import BeautifulSoup
import requests
page_link = "https://www.game.co.uk/en/m/games/best-selling-games/best-selling-xbox-one-games/?merchname=MobileTopNav-_-XboxOne_Games-_-BestSellers&pageNumber={}&pageMode=true"
page_no = 0
while True:
page_no+=1
res = requests.get(page_link.format(page_no))
soup = BeautifulSoup(res.text,'lxml')
container = soup.select(".productInfo h2")
if len(container)<=1:break
for content in container:
print(content.text)
最后几个标题的输出:
ARK Survival Evolved
Kingdom Come Deliverance Special Edition
Halo 5 Guardians
Sonic Forces
The Elder Scrolls Online: Summerset - Digital