利用代理IP爬取当当网数据并进行数据分析

在数据科学领域,数据爬取是获取所需数据的重要方式之一。特别是在电商平台上,数据的实时更新和丰富性使得其成为分析消费者行为、市场趋势的重要来源。然而,由于电商网站通常会对爬虫进行限流和封禁,我们需要借助代理IP技术来模拟正常用户请求。本文将以当当网为例,介绍如何利用代理IP爬取其商品数据,并进行简单的数据分析。

准备工作

在开始之前,我们需要准备以下工具和库:

  1. Python环境
  2. Requests库(用于发送HTTP请求)
  3. Beautiful Soup库(用于解析HTML)
  4. Pandas库(用于数据分析)
  5. 一些免费或付费的代理IP

可以使用以下命令安装所需库:

pip install requests beautifulsoup4 pandas

爬取当当网

接下来,我们编写代码来爬取当当网的商品信息。以下是一个基本的爬虫示例:

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

# 设置代理列表
proxies = [
    'http://111.11.11.11:8888',
    'http://222.22.22.22:8888',
    # 添加更多代理IP
]

def get_random_proxy():
    return {'http': random.choice(proxies)}

def crawl_dangdang(page_number):
    url = f'http://search.dangdang.com/?key=Python&page_index={page_number}'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }

    try:
        response = requests.get(url, headers=headers, proxies=get_random_proxy(), timeout=10)
        response.raise_for_status()  # 检查请求是否成功
        response.encoding = response.apparent_encoding
        return response.text
    except requests.RequestException as e:
        print(f"Request failed: {e}")
        return None

def parse_html(html):
    soup = BeautifulSoup(html, 'html.parser')
    products = []

    for item in soup.select('.item'):
        title = item.select_one('.name a').text.strip()
        price = item.select_one('.price').text.strip()
        products.append({'title': title, 'price': price})

    return products

if __name__ == '__main__':
    all_products = []

    # 爬取前3页数据
    for page in range(1, 4):
        html = crawl_dangdang(page)
        if html:
            products = parse_html(html)
            all_products.extend(products)

    # 将结果存储到DataFrame
    df = pd.DataFrame(all_products)
    print(df)

数据分析

在爬取到数据后,我们可以借助Pandas库进行简单的数据分析。以下是一个示例,计算商品的平均价格。

# 数据清洗
df['price'] = df['price'].str.replace('¥', '').str.replace(',', '').astype(float)

# 计算平均价格
average_price = df['price'].mean()
print(f"平均价格: {average_price:.2f} 元")

# 统计商品数量
product_count = df['title'].count()
print(f"商品数量: {product_count}")

注意事项

在进行爬虫行为时,有几项伦理和法律注意事项:

  1. 遵循robots.txt:查看网站的robots.txt文件,了解允许和禁止爬取的规则。
  2. 请求频率:合理控制请求频率,以免对目标网站造成负面影响。
  3. 使用合法的代理IP:确保代理IP的使用符合相关法律法规。

总结

本文展示了如何利用Python进行爬虫,爬取当当网的商品数据,并使用Pandas进行数据分析。通过代理IP,可以有效规避网站的限制,从而获取更大范围的数据。在实际应用中,可以根据需求扩展爬取逻辑和分析方法,以获得更加全面的数据洞察。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部