【问题标题】:Scraper clicking on the same link cyclically?Scraper 循环点击同一个链接?
【发布时间】:2017-08-06 16:11:59
【问题描述】:

我在 python 中编写了一些脚本,使用 selenium 从 redmart 网站上抓取不同产品的名称和价格。我的目标是点击主页上方10个类别中的每个类别,并解析所有进入目标页面的产品。但是,当点击一个类别时,浏览器是在新打开的页面上,所以此时需要再次进入主页面才能点击 10 个类别链接中的另一个。我的爬虫点击一个链接,进入它的目标页面,从那里解析数据,回到主页并点击同一个链接,然后一遍又一遍地完成其余的工作。这是我正在尝试的脚本:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://redmart.com/bakery")
wait = WebDriverWait(driver, 10)

while True:
    try:
        wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "li.image-facets-pill")))
        driver.find_element_by_css_selector('img.image-facets-pill-image').click()          
    except:
        break

    for elems in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "li.productPreview"))):
        name = elems.find_element_by_css_selector('h4[title] a').text
        price = elems.find_element_by_css_selector('span[class^="ProductPrice__"]').text
        print(name, price)

    driver.back()

driver.quit()   

顺便说一句,我认为有必要调整此脚本中的“try”和“except”块以获得所需的输出。

【问题讨论】:

  • driver.back() 不起作用吗?
  • 是的,“driver.back()”正在工作,但我的循环有问题,所以它再次点击相同的链接等等。

标签: python python-3.x selenium selenium-webdriver web-scraping


【解决方案1】:

您可以实现简单的计数器,允许您遍历类别列表,如下所示:

counter = 0

while True:

    try:
        wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "li.image-facets-pill")))
        driver.find_elements_by_css_selector('img.image-facets-pill-image')[counter].click()      
        counter += 1    
    except IndexError:
        break  

    for elems in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "li.productPreview"))):
        name = elems.find_element_by_css_selector('h4[title] a').text
        price = elems.find_element_by_css_selector('span[class^="ProductPrice__"]').text
        print(name, price)

    driver.back()

driver.quit() 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多