【发布时间】:2019-09-13 15:27:36
【问题描述】:
我正在使用 selenium 和 geckodriver(在 Firefox 上)来抓取 eBay。我的操作系统是 Ubuntu 16.04。
我只想点击下一步!我究竟做错了什么?我已经评论了两个不起作用的按钮分配实例......
# import libraries
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
import time
import pandas as pd
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
# specify the url
urlpage = 'https://www.ebay.com/b/Nike-Athletic-Apparel-for-Women/185082/bn_648725?rt=nc&LH_Sold=1'
print(urlpage)
# run firefox webdriver from executable path of your choice
driver = webdriver.Firefox()
# get web page
driver.get(urlpage)
for page_num in range(0, 2):
parentElement = driver.find_element_by_class_name("s-item")
results = parentElement.find_elements_by_css_selector("*") # all children by CSS
#button = driver.find_elements_by_class_name('ebayui-pagination__control') # not working
#button = driver.find_elements_by_xpath('//html/body/div[3]/div[3]/div[4]/section[1]/div[2]/nav/a[2]/span/svg[2]/use') # not working
button.click()
print('Number of results', len(results))
for r in results:
print(r.text)
df = pd.DataFrame(results)
df.head()
df.to_csv('eBay_scrape.csv')
driver.quit()
收到错误:
https://www.ebay.com/b/Nike-Athletic-Apparel-for-Women/185082/bn_648725?rt=nc&LH_Sold=1
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-2-58b4e0e554fc> in <module>
19 #results = parentElement.find_elements_by_tag_name("li") # not working...
20 #results = driver.find_elements_by_class_name("vip") # 50 results per page. But useless...
---> 21 button = driver.find_elements_by_class_name('ebayui-pagination__control')
22 #button = driver.find_elements_by_xpath('//html/body/div[3]/div[3]/div[4]/section[1]/div[2]/nav/a[2]/span/svg[2]/use')
IndexError: list index out of range
【问题讨论】:
-
“不工作”到底是什么意思?
-
@FiddleStix - 添加了上面的错误消息。我在抓取方面还比较陌生,所以我希望上面显示我缺乏经验。
-
我认为
find_elements()函数返回一个列表,find_element()函数返回单个值,如果找不到则引发错误。因此,您可能需要button = driver.find_elements_by_somehow('something')[0]或button=driver.find_element_by_somehow('something)。我建议对这种事情使用调试器,因为您很快就会看到正在返回一个列表。
标签: python selenium selenium-webdriver web-scraping