Python请求模块 - 显示更多结果

时间:2018-06-08 15:32:13

标签: python web-scraping python-requests

我目前正在开展一个用于webscraping的学习项目 我选择了我的网站:

  

https://www.game.co.uk/en/m/games/best-selling-games/best-selling-xbox-one-games/?merchname=MobileTopNav-_-XboxOne_Games-_-BestSellers#Page0

在此页面上,底部有一个按钮,显示下一个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("  ")

2 个答案:

答案 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