Python 如何有条件地刮取网站数据?
我已经创建了一个webscraper,它可以从一个网站上抓取数据,如产品名称、价格、描述、商品号等。该抓取器被输入同一个网站的多个网址(这意味着它被输入ebay.com/手提包ebay.com/香水ebay.com/cameras等)。 我的问题是,如果某个网站说ebay.com/手提包有一个“RRP”栏,它会将其删除,但如果网站“ebay.com/cameras”没有RRP栏,那么程序会因为明显的原因而失败。 错误内容如下:Python 如何有条件地刮取网站数据?,python,python-3.x,selenium,selenium-webdriver,selenium-chromedriver,Python,Python 3.x,Selenium,Selenium Webdriver,Selenium Chromedriver,我已经创建了一个webscraper,它可以从一个网站上抓取数据,如产品名称、价格、描述、商品号等。该抓取器被输入同一个网站的多个网址(这意味着它被输入ebay.com/手提包ebay.com/香水ebay.com/cameras等)。 我的问题是,如果某个网站说ebay.com/手提包有一个“RRP”栏,它会将其删除,但如果网站“ebay.com/cameras”没有RRP栏,那么程序会因为明显的原因而失败。 错误内容如下: selenium.common.exceptions.NoSuchE
selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“方法”:“xpath”,“选择器”:“/*[@id=“vi priceDetails”]/span[1]/span[2]/span”}
我如何确保程序不失败,而只是在RRP前面打印一个“-”?
下面是我的代码示例:
import time
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
def scrape_products():
website_address = [
'https://www.ebay.co.uk/itm/The-Discworld-series-Carpe-jugulum-by-Terry-Pratchett-Paperback-Amazing-Value/293566021594?hash=item4459e5ffda:g:yssAAOSw3NBfQ7I0',
'https://www.ebay.co.uk/itm/Edexcel-AS-A-level-history-Germany-and-West-Germany-1918-89-by-Barbara/293497601580?hash=item4455d1fe2c:g:6lYAAOSwbRFeXGqL']
options = webdriver.ChromeOptions()
options.add_argument('start-maximized')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
browser = webdriver.Chrome(ChromeDriverManager().install(), options=options)
for web in website_address:
browser.get(web)
time.sleep(2)
product_rrp = browser.find_element_by_xpath('//*[@id="vi-priceDetails"]/span[1]/span[2]/span').text
#rest of code
print(product_rrp)
if __name__ == "__main__":
scrape_products()
我不知道如何解决这个问题。请帮帮我。谢谢 在这种情况下,可以使用find元素
elems=browser。通过xpath('/*[@id=“vi priceDetails”]/span[1]/span[2]/span')查找元素
如果len(elems)>0:
product\u rrp=elems[0]。文本
您可以使用try..except块。如果找到,则将打印else转到except block并打印其他值,然后继续循环
for web in website_address:
browser.get(web)
time.sleep(2)
try:
product_rrp = browser.find_element_by_xpath('//*[@id="vi-priceDetails"]/span[1]/span[2]/span').text
print(product_rrp)
except:
print("some value instead")
continue
注意:我已更改选择器,因为您的选择器在我的电脑中不工作 有两种方法,使用
try except
block
try:
product_rrp = browser.find_element_by_css_selector('.actPanel div div:nth-child(2) span').text
print(product_rrp)
except:
print('no rpp')
或者使用查找\u元素\u…
(使用s
)并检查是否有结果
product_rrp = browser.find_elements_by_css_selector('.actPanel div div:nth-child(2) span')
if product_rrp: # has results
print(product_rrp[0].text) # notice the [0]
else:
print('no rpp')