【问题标题】:Getting Page Number from Site Using BeautifulSoup/Selenium使用 BeautifulSoup/Selenium 从站点获取页码
【发布时间】:2021-12-27 15:02:05
【问题描述】:

我正在学习网络抓取并尝试获取位于此页面底部的销售页面总数(“https://www.farfetch.com/uk/shopping/women/sale/all/items.aspx "),但我正在努力这样做。

确切地说,我正在尝试获取元素内的文本:<div class="_7ba1d5 _a535c4 _ec791b" data-testid="page-number">1 of 532</div>

我尝试过使用 BeautifulSoup: Pages = pageSoup.find("div", {"data-testid" : "page-number"}).text 但没有运气。

然后我尝试使用 Selenium,但我也在努力寻找课程。我尝试过使用driver.find_element(By.XPATH('')),但也没有运气。

如果这些是愚蠢的问题,我深表歉意,但我对网络抓取相当陌生。

【问题讨论】:

    标签: python selenium web-scraping beautifulsoup


    【解决方案1】:

    能够通过以下代码提取文本。

    需要向下滚动到页面末尾,以便提取详细信息。

    可能会或可能不会点击Accept Cookies按钮继续。

    # Imports required for Explicit wait.
    
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    driver.get("https://www.farfetch.com/uk/shopping/women/sale/all/items.aspx")
    
    wait = WebDriverWait(driver,30)
    
    # Click on Accept cookies
    wait.until(EC.element_to_be_clickable((By.XPATH,"//button[contains(text(),'Accept All')]"))).click()
    
    # Scroll down to the footer
    driver.execute_script("window.scrollBy(0,document.body.scrollHeight)")
    driver.execute_script("window.scrollBy(0,-1000);")
    
    page_num = wait.until(EC.presence_of_element_located((By.XPATH,"//div[@data-testid='page-number']")))
    print(page_num.text)
    
    1 of 532
    

    【讨论】:

      【解决方案2】:

      因此,如果您的page_source 是正确的,您可以通过以下css selector 实现您的目标:

      soup.select_one('div[data-testid="page-number"]').text
      

      示例

      from bs4 import BeautifulSoup
      
      html='''<div class="_7ba1d5 _a535c4 _ec791b" data-testid="page-number">1 of 532</div>'''
      soup = BeautifulSoup(html, 'lxml')
      soup.select_one('div[data-testid="page-number"]').text
      

      【讨论】:

        【解决方案3】:

        一种理想的方法是继续滚动,直到找到文本为 1 of 532 的元素,从而为visibility_of_element_located() 引入WebDriverWait,您可以使用以下任一Locator Strategies

        • 使用xpath

          driver.get("https://www.farfetch.com/uk/shopping/women/sale/all/items.aspx")
          WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[data-testid='Button_PrivacySettingsBanner_AcceptAll']"))).click()
          while True:
              try:
                driver.execute_script("window.scrollBy(0,1500)")
                print(WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[data-testid='page-number']"))).text)
                break
              except TimeoutException:
                continue
          

          driver.quit()

        • 控制台输出:

          1 of 532
          

        【讨论】:

          猜你喜欢
          • 2018-10-28
          • 1970-01-01
          • 2016-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-29
          • 2018-05-31
          相关资源
          最近更新 更多