Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用xpath或bs4从两个不同的模板获取价格?(python、web scraping)_Python_Selenium_Web Scraping - Fatal编程技术网

如何使用xpath或bs4从两个不同的模板获取价格?(python、web scraping)

如何使用xpath或bs4从两个不同的模板获取价格?(python、web scraping),python,selenium,web-scraping,Python,Selenium,Web Scraping,我有两个不同价格的模板。对于第一个模板,price具有id priceblock\u ourprice,并且打印正确,但是对于第二个模板,它不打印价格。如何以csv格式打印价格?你可以用 还是美味的汤。这段代码的问题在于第一个try/except语句。我附上了代码和输出(csv)。我将感谢任何帮助 这是输出(CSV) 我用我的浏览器检查了这两个URL,在第二个URL中似乎没有id为priceblock的span。所以当然driver.find\u element\u by\u xpath找不到

我有两个不同价格的模板。对于第一个模板,price具有id priceblock\u ourprice,并且打印正确,但是对于第二个模板,它不打印价格。如何以csv格式打印价格?你可以用 还是美味的汤。这段代码的问题在于第一个try/except语句。我附上了代码和输出(csv)。我将感谢任何帮助

这是输出(CSV)


我用我的浏览器检查了这两个URL,在第二个URL中似乎没有id为priceblock的
span
。所以当然
driver.find\u element\u by\u xpath
找不到合适的跨度

但是我可以找到这个跨度:
$62.26


当您使用浏览器时,amazon页面服务器的内容可能不同,而在运行selenium时,页面服务器的内容可能不同(例如,因为cookies)。请仔细检查您在selenium中获得的页面的来源。

尝试
price=driver。通过xpath('//span[@id=“color\u name\u 0\u price”]/span;//span[@id=“priceblock\u ourprice”]]查找\u element\u。text
为应该打印第二个价格的单元格提供空白。这是因为没有带有
@id=“priceblock\u ourprice”的节点
第页,请输入正确的代码好吗?谢谢。对于第二个try/catch,它给出了包含priceblock\u ourprice的模板的价格,但问题在于第一个try/catch(第二个模板)。你能运行代码查看输出(csv)吗?或者你能发布代码吗?62.26美元是旧产品的价格。我打印的价格是66.95美元,我想这就是价格。下面这些卖家提供。来吧,我们不会重写你的代码。这不是一个代码修复服务。阅读答案和评论,然后自己修复。如果您还有任何疑问或问题,请清楚地询问,以便我们理解。
import csv
from selenium import webdriver
from bs4 import BeautifulSoup
import requests
from lxml import html

links = [
      'https://www.amazon.com/Stock-Your-Home-Spinning-Organizer/dp/B00424ILAQ/ref=sr_1_4012/138-3260504-2979110?s=bedbath&ie=UTF8&qid=1520585702&sr=1-4012&keywords=-sdfg',
      'https://www.amazon.com/Seward-Trunk-College-Footlocker-SWD5120-10/dp/B004835DI4/ref=sr_1_3?s=furniture&ie=UTF8&qid=1520407190&sr=1-3&keywords=-hgfd'
]
proxies = {
    'http': 'http://218.50.2.102:8080',
    'https': 'http://185.93.3.123:8080'
}

def get_information(driver,urls):
    with open('csv/sort_products.csv', "w", newline="", encoding="utf-8") as infile:
        writer = csv.writer(infile)
        writer.writerow(['Price',  'Link'])

        for url in urls:
            driver.get(url)
            soup = BeautifulSoup(driver.page_source,"lxml")

            try:
                price = driver.find_element_by_xpath('//span[@id="color_name_0_price"]/span').text

            except:
                price='No price v1'
                print('No price v1')

            try:
                price = driver.find_element_by_xpath('//span[@id="priceblock_ourprice"]').text
            except:
                price='No price v2'
                print('No price v2')

            writer.writerow([ price, url])
            print(f'{url}\n')

if __name__ == '__main__':
    chrome_options = webdriver.ChromeOptions()

    chrome_options.add_argument('--proxy-server="%s"' % ';'.join(['%s=%s' % (k, v) for k, v in proxies.items()]))

    driver = webdriver.Chrome(executable_path="C:\\Users\Andrei-PC\Downloads\webdriver\chromedriver.exe",
                              chrome_options=chrome_options)
    get_information(driver,links)
    driver.quit()