Scrapy/BeautifulSoup模拟“点击"按钮以加载网站的一部分

o2rvlv0m  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(1027)

给予一个非常简单的例子,让我们以这个网站为例:https://www.cardmarket.com/en/Magic/Products/Booster-Boxes/Modern-Horizons-2-Collector-Booster-Box
正如你所看到的,为了加载更多的列表,你需要按下蓝色的“显示更多结果”按钮,在那几次。简单地说,有没有一种方法来“点击”这个按钮使用scrapy或美丽的汤,以获得访问该网站上的所有列表?如果有,我怎么做?如果没有,什么是最有效的工具,有能力这样做,我听说过 selenium ,但也听说它比scrapy/beautifulsoup慢得多,所以我更喜欢用这两种工具,或者用另一种工具

r6l8ljro

r6l8ljro1#

这似乎是Selenium的一个很好的用例。您可以使用它来模拟浏览器会话,然后根据需要将页面源代码交给Beautiful Soup。
请尝试以下操作:

from selenium import webdriver
from bs4 import BeautifulSoup

# Desired URL

url = "https://www.cardmarket.com/en/Magic/Products/Booster-Boxes/Modern-Horizons-2-Collector-Booster-Box"

# create a new Firefox session

driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.get(url)

# Get button and click it

python_button = driver.find_element_by_id("loadMoreButton")
python_button.click() #click load more button

# Pass to BS4

soup=BeautifulSoup(driver.page_source)

如果你想避免 selenium :

您链接的网站上的“加载更多”按钮使用 AJAX 请求加载更多数据。如果您真的不想使用Selenium,那么您可以尝试使用requests库来复制按钮在被单击时发出的相同AJAX请求。
你需要监控浏览器的网络标签来找出必要的标题,这可能需要一些调整才能得到正确的标题。
可能相关:
Simulating ajax request with python using requests lib

1cosmwyk

1cosmwyk2#

我看到这个网站使用 AJAX 加载内容,这也被称为“动态页面加载”,所以你可以做的是,而不是使用“资源繁重”的Selenium,你可以使用Requests+bs4来完成它。要开始,打开网页,并等待它完成初始加载,然后按“Ctrl+Shift+I”打开“检查”窗口,然后进入“网络”选项卡,点击“加载更多”按钮,加载更多内容。然后你会看到类似

的内容
然后,如果您看到响应,这是base64编码,然后将响应复制为CURL,如下所示

现在你的剪贴板中有了CURL请求,你可以很容易地使用this网站或“postman”将其转换为python代码。
您可以使用base64解码来获取响应并对其进行解析。

相关问题