【问题标题】:click link automatically and scraping自动点击链接并抓取
【发布时间】:2022-01-19 01:17:45
【问题描述】:

我尝试从该页面提取所有产品数据:

https://www.shufersal.co.il/online/he/קטגוריות/סופרמרקט/חטיפים%2C-מתוקים-ודגני-בוקר/c/A25

我试过了

shufersal = "https://www.shufersal.co.il/online/he/%D7%A7%D7%98%D7%92%D7%95%D7%A8%D7%99%D7%95%D7%AA/%D7%A1%D7%95%D7%A4%D7%A8%D7%9E%D7%A8%D7%A7%D7%98/%D7%97%D7%98%D7%99%D7%A4%D7%99%D7%9D%2C-%D7%9E%D7%AA%D7%95%D7%A7%D7%99%D7%9D-%D7%95%D7%93%D7%92%D7%A0%D7%99-%D7%91%D7%95%D7%A7%D7%A8/c/A25"
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())

import time
driver.get(shufersal)
products = driver.find_elements_by_css_selector("li.miglog-prod.miglog-sellingmethod-by_unit"
)

问题是只有当我点击产品时才会显示产品详细信息:

有什么选项可以自动点击所有链接并抓取打开的窗口?

【问题讨论】:

  • 您提供的网址存在服务器问题。

标签: python selenium web-scraping


【解决方案1】:

你想要的可以实现,但是是一个非常耗时的过程。

你必须:

确定您需要在页面中单击的元素(它们可能具有相同的类),然后将它们全部选中:

butons_to_click = driver.find_elements_by_css_selector({RELEVANT SELECTOR HERE})

然后你应该遍历所有可点击的元素,点击它们,等待弹出窗口加载,抓取数据,关闭弹出窗口:

scraped_list = []
for button_instance in buttons_to_click:
    button_instance.click()
    #scrape the information you need here and append to scraped_list

    #find close popup button
    driver.find_element_by_xpath({XPATH TO ELEMENT}).click()

为了使其正常工作,设置 selenium 的隐式等待参数很重要。这样做的是,如果它没有找到所需的元素,它将等待 X 秒直到它被加载,如果 X 通过然后它会抛出一个错误(如果它是预期的,你可以在你的代码中处理错误) .

在您的情况下,您需要等待时间,因为在您单击产品以显示弹出窗口后,加载信息可能需要几秒钟,如果您没有设置隐式等待,您的脚本将退出未找到元素错误。更多关于 selenium 的等待参数的信息可以在这里找到:https://selenium-python.readthedocs.io/waits.html

#put this line immediatelly after creating the driver object
driver.implicitly_wait(10) # seconds

***建议: 我建议您在查找元素时始终使用 Xpath,它的语法实际上可以模拟所有其他 selenium 选择器,速度更快,并且可以更轻松地过渡到 C 编译的 html 解析器(如果您扩展您的爬虫,您将需要它 - 推荐 lxml一个使用编译解析器的python包)

【讨论】:

  • 一般不会推荐 XPATH,因为它实际上是定位器中最脆弱和最慢的。如果必须,请始终使用 ID、NAME、CSS_SELECTOR 和 XPATH。
猜你喜欢
  • 1970-01-01
  • 2012-07-27
  • 2018-08-01
  • 1970-01-01
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
相关资源
最近更新 更多