【问题标题】:Unable to scrape the next page(pagination) using python selenium无法使用 python selenium 抓取下一页(分页)
【发布时间】:2019-07-29 18:47:43
【问题描述】:

我试图从 konga.com 抓取数据。但我能够刮掉第一页,但第二页出现问题。我还复制了网站第 2 页的 URL,但它确实有效。 代码如下:

from selenium import webdriver
import time

browser = webdriver.Chrome(executable_path='C:\Python27\Scripts\chromedriver.exe')

for i in range(1,50):
   y= '%0d'%i
   url="https://www.konga.com/category/electronics-5261?"+ "page="+'%0d'%i
   print url
   browser.get("url")


p=browser.find_elements_by_xpath ("//div[@class='af885_1iPzH']/h3")

for a in p:
        print '.........page'+ str(i)+ '..........' 
        print a.text

【问题讨论】:

  • 你想彻底废弃什么?
  • from selenium import webdriver import time browser = webdriver.Chrome(executable_path='C:\Python27\Scripts\chromedriver.exe') for i in range(1,50): y= '%0d '%i url="konga.com/category/electronics-5261?"+"page="+'%0d'%i 打印url browser.get("url") p=browser.find_elements_by_xpath("//div[@class='af885_1iPzH']/h3 ") #q=browser.find_elements_by_xpath ("//div[@class='_4e81a_39Ehs']/span[@class='d7c0f_sJAqi']") for i in p: print '.......page '+ str(i)+ '........' 打印 i.text
  • 我指的是您页面上的元素。我得到了脚本,但我不确定你在页面上寻找什么。
  • 我正在尝试获取所列产品的名称
  • 欢迎来到 SO。请花时间阅读 stackoverflow.com/help/how-to-ask。它将帮助您提出可靠的问题,这些问题有望得到有用的答案。并且——根据@Edeki Okoh 的指示——不要在 cmets 中发布代码(而是编辑原始问题)。

标签: python selenium web-scraping pagination


【解决方案1】:

你很亲密。问题是您试图在实际加载到页面之前找到类名。与分页链接相同。看起来这些元素在页面加载之前的几秒钟内没有完全加载。您需要做的是让您的网络驱动程序等待几秒钟,直到使用 WebDriverWait 方法看到该元素:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--hide-scrollbars')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument("--log-level=3")  # fatal


page = 0

browser = webdriver.Chrome(executable_path=r'C:\Users\edekio\Downloads\chromedriver.exe', chrome_options=chrome_options)

url = "https://www.konga.com/category/electronics-5261"
browser.get(url)

while page < 51:

    page = page + 1


    next_page = WebDriverWait(browser, 15).until(EC.presence_of_element_located((By.LINK_TEXT, str(page))))
    next_page.click()


    print("page " + str(page))

    element = WebDriverWait(browser, 15).until(
        EC.presence_of_element_located((By.CLASS_NAME, "af885_1iPzH")))
    print(element.text)

前 3 页的输出:

page 1
Q18 Smartwatch - Silver
page 2
Zealot S12 Bluetooth Wireless Speaker...
page 3
I8 Tws Wireless Earbuds - White

这是用 python 3.6 编写的。看起来您使用的是 python 2.x,但如果它不适用于您的版本,您可以使用在线转换器。我建议将 Selenium 升级到 python 3.6,因为我不知道它们的所有功能是否都适用于 Python 2.x

【讨论】:

  • 感谢您的脚本。但我想要每个页面的整个产品
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2023-03-23
  • 2018-10-05
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 2018-06-01
相关资源
最近更新 更多