【发布时间】:2021-04-13 23:24:59
【问题描述】:
我是网络抓取的新手,并且有一个带有下拉菜单的汽车网站。如何在下拉菜单中选择汽车品牌(例如 BMW),然后点击查看所有具有该品牌的汽车? Beautifulsoup 甚至可以做到这一点,还是我需要 Selenium?
网站是这个https://www.leasingmarkt.ch/listing。我设法获得了每个汽车品牌需要输入的data_values(数字),但我不知道如何将它们输入到网站然后点击?
for x in soup.find_all("div", class_ = "dropdown manufacturer-dropdown"):
for car in x.find_all('li'):
try:
cars_id[car.find("span").text] = car.get('data-value')
except AttributeError:
continue
我认为只需更改 url 以使汽车品牌的编号出现在链接中即可。但是如何选择然后单击(如果可能的话,使用BeautifulSoup)?
【问题讨论】:
-
如果你需要点击然后使用 Selenium 的函数而不是
Beautifulsoup。您不能“点击”Beautifulsoup- 您只能使用requests/urllib获取 URL 并加载新的 HTML。但是如果页面使用 JavaScript 加载新页面,那么您将需要Selenium而没有Beautifulsoup -
此页面使用 JavaScript 更新页面。当您选择元素时,它会运行 JavaScritp,它运行像
https://www.leasingmarkt.ch/lmrpc/listing-ajax-update?lmrpc=1.0&query=%22v%3D2%26ids%3D%26sort%3Dpopularity%26takeoverContract%3D0%26newContract%3D1%26manufacturer%3D13 ...这样的 url 并以 JSON 格式获取结果并用 HTML 替换它。在此 url 中,您可以看到manufacturer .. 13,其中13是BMW下拉列表中的值。您可以将此 URL 与requests一起使用来获取页面,但使用 Selenium 会更容易。 -
你到底是怎么得到这个网址的?
-
我在
Firefox/Chrome中使用了DevTools(标签Network,过滤器XHR)来查看所有通过JavaScript 从浏览器发送到服务器的请求。 -
我的意思是获取上述网址的代码?它可以与 Selenium 一起使用吗?
标签: python selenium web-scraping beautifulsoup