【问题标题】:scraping all web pages抓取所有网页
【发布时间】:2022-11-02 04:15:23
【问题描述】:

我有一个python脚本,我分为不同的功能。我的第一个函数“get_url”应该在用户在提示中输入所需的产品名称后获取产品 url。我想在网站的所有页面中获取产品详细信息。现在,当我运行我的代码时,我只从第一个网页而不是所有 25 页中获取产品详细信息。请帮助@Nathan Mills

这是我的代码块

从硒导入网络驱动程序

进口时间

从 selenium.webdriver.chrome.service 导入服务

从 selenium.webdriver.common.by 导入

将熊猫导入为 pd

def get_url(产品):

for x in range(1,26):
    product = product.replace(' ', '%20')
    template = 'https://www.konga.com/search?search=={product}&page=={x}' 
    url = template.format(product, x)
    return url

def get_all_products(巢):

name = nest.find_element(By.CLASS_NAME, 'af885_1iPzH').text.strip()
current_price = nest.find_element(By.CLASS_NAME, 'd7c0f_sJAqi').text.strip()
reviews = nest.find_element(By.CLASS_NAME, 'eea9b_1Ma8-').text.strip()   
product_info = (name, current_price, reviews)     
return product_info  

定义主要(产品):

product_list = []
url = get_url(product)

service = Service(executable_path="C:/driver/chromedriver_win32/chromedriver.exe")
driver = webdriver.Chrome(service=service)
driver.get(url)
driver.maximize_window()
time.sleep(5)  
  
product_cards = driver.find_elements(By.CLASS_NAME, 'bbe45_3oExY')
time.sleep(5)

for everyCard in product_cards:
    productDetails = get_all_products(everyCard)
    product_list.append(productDetails)


col = ['Product_Name', 'Current_Price', 'Product_Reviews']       
df = pd.DataFrame(product_list, columns=col)
df.to_csv("C:\\Users\LP\Documents\MainTest\MainTest.csv", index=False, encoding='utf-8', mode='a')

product = input('输入您要查找的产品:')

主要产品)

【问题讨论】:

    标签: python selenium web-site-project


    【解决方案1】:

    函数get_url() 有一个以return 结束的循环。因此该功能在第一个周期后停止工作。它生成一个 URL,返回它,这就是它所做的一切。
    要解决此问题,您可以将所有 url 收集到函数内的变量中并将其返回或将 return 更改为 yield。这个 yield 会将你的函数变成一个生成器,你可以将它用作一个列表。
    另外我将url = template.format(product, x) 更改为url = template.format(product=product, x=x),因为它不起作用。
    所以yield的代码如下:

    from selenium import webdriver
    
    import time
    
    from selenium.webdriver.chrome.service import Service
    
    from selenium.webdriver.common.by import By
    
    import pandas as pd
    
    
    def get_url(product):
        for x in range(1, 26):
            product = product.replace(' ', '%20')
            template = 'https://www.konga.com/search?search=={product}&page=={x}'
            url = template.format(product=product, x=x)
            yield url
    
    
    def get_all_products(nest):
        name = nest.find_element(By.CLASS_NAME, 'af885_1iPzH').text.strip()
        current_price = nest.find_element(By.CLASS_NAME, 'd7c0f_sJAqi').text.strip()
        reviews = nest.find_element(By.CLASS_NAME, 'eea9b_1Ma8-').text.strip()
        product_info = (name, current_price, reviews)
        return product_info
    
    
    def main(product):
        product_list = []
        url = get_url(product)
    
        for one_url in url:
            service = Service(executable_path="C:/driver/chromedriver_win32/chromedriver.exe")
            driver = webdriver.Chrome(service=service)
            driver.get(one_url)
            driver.maximize_window()
            time.sleep(5)
    
            product_cards = driver.find_elements(By.CLASS_NAME, 'bbe45_3oExY')
            time.sleep(5)
    
            for everyCard in product_cards:
                productDetails = get_all_products(everyCard)
                product_list.append(productDetails)
    
            col = ['Product_Name', 'Current_Price', 'Product_Reviews']
            df = pd.DataFrame(product_list, columns=col)
            df.to_csv("C:\UsersLPDocumentsMainTestMainTest.csv", index=False, encoding='utf-8', mode='a')
            driver.quit()
    
    
    product = input('Enter Product You Are Looking For : ')
    
    main(product)
    

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 2021-09-20
      • 2019-09-18
      • 1970-01-01
      • 2021-01-30
      相关资源
      最近更新 更多