【问题标题】:Why am I not able to scrape Multiple URL's of the same website using selenium in python?为什么我无法在 python 中使用 selenium 抓取同一网站的多个 URL?
【发布时间】:2021-03-03 04:13:59
【问题描述】:

我从给定的 URL 中抓取了 eBay 的产品信息,例如名称、价格、描述等。但是,如果有多个 URL,比如一组 10 个 URL,我如何确保所有网站都被抓取?这是我的网页抓取 eBay 产品的代码。 webscraper.py

import time
from selenium import webdriver
from bs4 import BeautifulSoup
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_price_raw_list = browser.find_elements_by_xpath('//*[@id="vi-mskumap-none"]')
        product_name_raw_lst = browser.find_elements_by_xpath('//*[@id="itemTitle"]')
        #rest of the code


if __name__ == "__main__":
        scrape_products()

这里的代码刮掉了first website address而不是第二个?为什么它不抓取第二个网站地址?我也尝试将它附加到一个空列表中,但它仍然没有用。我无法弄清楚。请帮忙!谢谢。

【问题讨论】:

  • 如果将browser的创建移动到循环内呢?
  • @TimRoberts 仍然显示第一个网站,而不是第二个。
  • 如果我尝试运行此代码,它可以正常工作。也许您的其余代码中存在某些问题。
  • @RhysFlook 是的,代码工作正常,虽然它没有抓取第二个地址(或者如果我输入多个地址)。
  • 不刮是什么意思?如果我尝试从元素中获取文本,我能够成功地从每个网页中获取正确的文本。

标签: python python-3.x selenium selenium-webdriver selenium-chromedriver


【解决方案1】:
import time
from selenium import webdriver
from bs4 import BeautifulSoup
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(executable_path='chromedriver.exe', options=options)
    for web in website_address:
        browser.get(web)
        time.sleep(2)
        product_price_raw_list = browser.find_element_by_xpath('//*[@id="vi-mskumap-none"]').text
        product_name_raw_lst = browser.find_element_by_xpath('//*[@id="itemTitle"]').text
        print(product_name_raw_lst)
        print(product_price_raw_list)


if __name__ == "__main__":
    scrape_products()

对我来说,将元素更改为变量 product_name_raw_lst / product_price_raw_list 中的元素

scraping two items

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多