Python爬虫批量查询网页数据并导出Excel

要编写一个Python爬虫程序来批量查询网页中 class="product-brand" 的值,并将结果输出为一个Excel表格,你可以使用 requests 库来获取网页内容,使用 BeautifulSoup 来解析HTML,并使用 pandas 来将数据保存为Excel文件。以下是一个示例代码:

python
复制
import requests
from bs4 import BeautifulSoup
import pandas as pd

# 定义要爬取的网页URL列表
urls = [
    'https://example.com/product1',
    'https://example.com/product2',
    'https://example.com/product3',
    # 添加更多URL
]

# 创建一个空列表来存储结果
results = []

# 遍历每个URL
for url in urls:
    # 发送HTTP请求获取网页内容
    response = requests.get(url)
    
    # 检查请求是否成功
    if response.status_code == 200:
        # 使用BeautifulSoup解析HTML
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 查找所有class为"product-brand"的元素
        product_brands = soup.find_all(class_="product-brand")
        
        # 提取每个元素的文本内容并添加到结果列表
        for brand in product_brands:
            results.append({'URL': url, 'Product Brand': brand.text.strip()})
    else:
        print(f"Failed to retrieve {url}")

# 将结果转换为DataFrame
df = pd.DataFrame(results)

# 将DataFrame保存为Excel文件
df.to_excel('product_brands.xlsx', index=False)

print("数据已成功保存到 product_brands.xlsx")

代码说明:

  1. requests.get(url): 发送HTTP请求以获取网页内容。

  2. BeautifulSoup(response.text, 'html.parser'): 使用BeautifulSoup解析HTML内容。

  3. soup.find_all(class_="product-brand"): 查找所有 class="product-brand" 的元素。

  4. brand.text.strip(): 提取元素的文本内容并去除前后空白字符。

  5. pd.DataFrame(results): 将结果列表转换为Pandas DataFrame。

  6. df.to_excel('product_brands.xlsx', index=False): 将DataFrame保存为Excel文件。

依赖库安装:

在运行代码之前,确保你已经安装了所需的Python库。你可以使用以下命令安装它们:

bash
复制
pip install requests beautifulsoup4 pandas openpyxl

注意事项:

  • 请确保你有权限爬取目标网站,并遵守网站的 robots.txt 文件和相关法律法规。

  • 如果网页内容是动态加载的(例如通过JavaScript),你可能需要使用 Selenium 或其他工具来获取完整的网页内容。

运行此代码后,你将在当前目录下生成一个名为 product_brands.xlsx 的Excel文件,其中包含从指定网页中提取的 product-brand 值。

 

如果网页内容是动态加载的,将上面的代码修改一下

如果网页内容是动态加载的(即通过 JavaScript 渲染),requests 和 BeautifulSoup 将无法直接获取完整的网页内容。此时,我们需要使用 Selenium 来模拟浏览器行为,加载动态内容后再进行解析。

以下是修改后的代码,使用 Selenium 来处理动态加载的网页内容:

修改后的代码:

python
复制
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import pandas as pd
import time

# 设置 Chrome 选项
chrome_options = Options()
chrome_options.add_argument("--headless")  # 无头模式,不打开浏览器窗口
chrome_options.add_argument("--disable-gpu")  # 禁用 GPU 加速

# 设置 ChromeDriver 路径(需根据你的环境修改)
chrome_driver_path = '/path/to/chromedriver'  # 替换为你的 ChromeDriver 路径

# 初始化 WebDriver
service = Service(chrome_driver_path)
driver = webdriver.Chrome(service=service, options=chrome_options)

# 目标网页的URL
url = 'https://example.com'  # 替换为你要爬取的网页URL

# 打开网页
driver.get(url)

# 等待页面加载完成(根据需要调整等待时间)
time.sleep(5)  # 等待 5 秒,确保动态内容加载完成

# 查找所有 class 属性包含 "product-brand-name" 的元素
brand_elements = driver.find_elements(By.CSS_SELECTOR, '[class*="product-brand-name"]')

# 提取元素的文本内容
brand_names_list = [element.text for element in brand_elements]

# 关闭浏览器
driver.quit()

# 将结果保存到 DataFrame 中
df = pd.DataFrame(brand_names_list, columns=['Brand Name'])

# 导出到 Excel 文件
output_file = 'brand_names.xlsx'
df.to_excel(output_file, index=False)

print(f"数据已导出到 {output_file}")

代码说明:

  1. Selenium:

    • 使用 Selenium 模拟浏览器行为,加载动态内容。

    • webdriver.Chrome 启动 Chrome 浏览器(无头模式)。

    • driver.find_elements(By.CSS_SELECTOR, '[class*="product-brand-name"]') 查找所有 class 属性包含 "product-brand-name" 的元素。

  2. 等待页面加载:

    • 使用 time.sleep(5) 等待页面加载完成。你可以根据网页的加载速度调整等待时间。

    • 如果需要更精确的等待,可以使用 WebDriverWait(见下文)。

  3. 提取数据:

    • 使用 element.text 提取元素的文本内容。

  4. 导出到 Excel:

    • 使用 pandas 将数据保存到 Excel 文件中。


使用 WebDriverWait 精确等待:

如果需要更精确地等待某个元素加载完成,可以使用 WebDriverWait。以下是修改后的等待部分代码:

python
复制
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待某个特定元素加载完成
try:
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, '[class*="product-brand-name"]'))
    )
except Exception as e:
    print("元素加载超时:", e)

依赖库安装:

在运行代码之前,确保你已经安装了所需的库:

bash
复制
pip install selenium pandas openpyxl

同时,你需要下载与你的 Chrome 浏览器版本匹配的 ChromeDriver,并将其路径替换到代码中的 chrome_driver_path


运行结果:

运行代码后,你会在当前目录下生成一个名为 brand_names.xlsx 的 Excel 文件,其中包含提取的品牌名称。


如果你有任何问题或需要进一步的帮助,请告诉我!

posted @   FBshark  阅读(79)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示