无法使用python硒刮下一页(分页)

时间:2019-03-07 19:18:32

标签: python selenium web-scraping pagination

我试图从konga.com抓取数据。但是我能够刮开第一页,但是第二页却出现了问题。我还复制了该网站的第2页的网址,但它确实起作用。 代码如下:

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

1 个答案:

答案 0 :(得分: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