当前位置: 首页 > article >正文

python爬取网站

这个示例将抓取一个假设的商品列表网站,提取商品名称和价格,并将数据保存到CSV文件中。

pip install requests beautifulsoup4 pandas

然后,使用以下代码:

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
import random

# 目标网址(假设为一个商品列表页面)
base_url = 'http://example.com/products?page={}'

# 存储抓取的数据
data = []

# 设置请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

# 处理分页
for page in range(1, 6):  # 假设我们抓取前5页
    url = base_url.format(page)
    try:
        # 发送请求
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # 检查请求是否成功

        # 解析网页内容
        soup = BeautifulSoup(response.text, 'html.parser')

        # 提取商品信息
        products = soup.find_all('div', class_='product')  # 假设商品信息在<div class='product'>中
        for product in products:
            name = product.find('h2', class_='product-name').text.strip()  # 假设商品名称在<h2 class='product-name'>中
            price = product.find('span', class_='product-price').text.strip()  # 假设价格在<span class='product-price'>中
            data.append({'name': name, 'price': price})

        # 随机延迟,避免被封禁
        time.sleep(random.uniform(1, 3))

    except requests.RequestException as e:
        print(f'请求错误: {e}')
    except Exception as e:
        print(f'解析错误: {e}')

# 将数据保存为CSV文件
df = pd.DataFrame(data)
df.to_csv('products.csv', index=False, encoding='utf-8-sig')

print('数据抓取完成,已保存为products.csv')

代码说明:

  1. 请求头:使用User-Agent伪装成浏览器,减少被封禁的风险。
  2. 分页处理:通过循环遍历多个页面,抓取每一页的数据。
  3. 异常处理:使用try...except块来捕获请求和解析中的错误,确保爬虫在遇到问题时不会崩溃。
  4. 随机延迟:在请求之间添加随机延迟,以减少被网站识别为爬虫的风险。
  5. 数据存储:使用pandas将抓取的数据存储为CSV文件,方便后续分析。

http://www.kler.cn/a/458388.html

相关文章:

  • vue最新源码探索分析
  • git分支与部署环境的关系以及开发规范
  • 【HENU】河南大学计院2024 计算机网络 期末复习知识点
  • MySQL 中存储金额数据一般使用什么数据类型
  • 【每日学点鸿蒙知识】Text填充父控件、Native接收数组、js逻辑不执行问题、UIAbility上下文问题、页面跳转路由栈
  • Apache Doris 创始人:何为“现代化”的数据仓库?
  • 【Lua之·Lua与C/C++交互·Lua CAPI访问栈操作】
  • Mono里运行C#脚本12—load_section_tables
  • java中泛型的作用--通俗易懂
  • Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现马赛克效果,Kotlin(3)
  • 哈佛商业评论 未来商业的技术趋势:百度李彦宏谈技术如何变革商业
  • vue2 elementui if导致的rules判断失效
  • C 实现植物大战僵尸(二)
  • 51.第二阶段x86游戏实战2-继续寻找lua
  • 跟着问题学19——大模型基础之BERT详解(2)
  • 关闭显示器的脚本
  • 从零开始开发纯血鸿蒙应用之逻辑封装
  • MySQL Workbench下载安装、 MySQL Workbench使用
  • 【Java基础】00.Java概述
  • OpenCV-Python实战(10)——形态学