我试图从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
答案 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