淘宝,京东,京东评论爬虫项目

淘宝,京东,京东评论爬虫项目

在当今数据驱动的世界中,自动化数据收集已成为一项重要技能。无论是市场研究、价格比较还是库存管理,自动化爬虫都能提供巨大的帮助。本文将介绍如何使用Python编程语言和Selenium库来自动化爬取京东,淘宝上的商品信息。

技术ChromiumPage

用于自动化Web应用程序测试的工具,它也常被用于爬取动态加载的网页数据。

开始之前,确保你的环境中安装了Python和Selenium库。你还需要下载对应浏览器的WebDriver,如ChromeDriver。

淘宝数据集:

例:

这是爬到七夕的热门商品

番茄酱的数据集

卫生纸的数据集

爬取淘宝的商品代码:

# 导入必要的模块
from DrissionPage import ChromiumPage
import re
import json
import csv
import time
# 询问用户输入要爬取的商品关键字
shop = input("请输入你想爬取的信息")
# 创建文件对象,并使用用户输入作为文件名
f = open(f'{shop}.csv', mode='w', encoding='utf-8', newline='')
# 字典写入方法
csv_writer = csv.DictWriter(f, fieldnames=[
    'userId',
    '标题',
    '劵前价',
    '劵后价',
    '图片链接',
    '省份',
    '城市',
    '销量',
    '店铺',
])
# 写入表头
csv_writer.writeheader()
# 打开浏览器
driver = ChromiumPage()
# 访问网站
driver.get('https://www.taobao.com/')
# 输入商品关键字
driver.ele('css:q').input(f'{shop}')
# 进行点击搜索
driver.ele('css:.btn-search').click()
# 监听数据包
driver.listen.start('h5/mtop.relationrecommend.wirelessrecommend.recommend')
for page in range(100):
    print(f'正在采集第{page + 1}页的数据内容')
    # 设置延时
    time.sleep(6)
    # 让网页数据下滑到最下方
    driver.scroll.to_bottom()
    # 等待数据包加载
    resp = driver.listen.wait()
    # 获取响应数据
    text = resp.response.body
    print(text)
    # 解析数据, 提取内容
    info = re.findall(' mtopjsonp\d+\((.*)', text)[0].replace(')', '')
    print(info)
    # 转数据类型
    json_data = json.loads(info)
    # 根据键值对取值, 提取商品信息所在列表
    items = json_data['data'].get('itemsArray', [])
    print(items)
    # for 循环遍历,提取列表里面元素
    for index in items:
        # 提取数据保存字典中
        area_info = index.get('procity', '').split(' ')
        if len(area_info) == 1:
            area_1 = area_info[0]  # 省份
            area_2 = '未知'  # 城市
        elif len(area_info) == 2:
            area_1 = area_info[0]  # 省份
            area_2 = area_info[1]  # 城市
        else:
            area_1 = '未知'  # 省份
            area_2 = '未知'  # 城市
        dit = {
            'userId': index.get('userId', ''),
            '标题': index.get('title', '').replace('<span class=H>', '').replace('</span>', ''),
            '劵前价': index.get('priceWithRate', ''),
            '劵后价': index.get('priceWap', ''),
            '图片链接': index.get('pic_path', ''),
            '省份': area_1,
            '城市': area_2,
            '销量': index.get('realSales', '').replace('人付款', '').replace('+', ''),
            '店铺': index.get('nick', ''),
        }
        # 写入数据
        csv_writer.writerow(dit)
        print(dit)
    # 点击下一页按钮ele.click.right()
    #driver.ele('css:.next-btn-helper').click()
    s=driver.eles('css:.next-btn-helper')
    print(s)
    s[1].click()
   # 关闭浏览器
driver.close()
# 关闭文件
f.close()

京东数据集:

例:

番茄丁数据集

番茄酱数据集:

京东爬虫代码:

import time
from DrissionPage import ChromiumPage
import csv
def scrape_jd(shop_name, num_pages=100):
    dp = ChromiumPage()
    dp.get('https://www.jd.com/')
    dp.ele('css:#key').input(shop_name)
    dp.ele('css:.button').click()
    with open(f'{shop_name}.csv', mode='w', encoding='utf-8', newline='') as f:
        csv_writer = csv.DictWriter(f, fieldnames=['标题', '价格', '评论条数', '店铺'])
        csv_writer.writeheader()

        for page in range(1, num_pages + 1):
            dp.wait(2)
            dp.scroll.to_bottom()
            time.sleep(3)  # 确保页面加载完成

            lis = dp.eles('css:.gl-item')
            for li in lis:
                try:
                    title = li.ele('css:.p-name a em').text
                    price = li.ele('css:.p-price strong i').text
                    #图片链接
                    # time.sleep(4)
                    # img = li.ele('css:.p-img a img').attr('src')
                    commit = li.ele('css:.p-commit strong a').text.strip()
                    print(commit)
                    shop = li.ele('css:.hd-shopname').text
                    dic = {
                        '标题': title,
                        '价格': price,

                        '评论条数': commit,
                        '店铺': shop,
                    }
                    csv_writer.writerow(dic)
                    print(dic)
                except Exception as e:
                    print(f"Error processing item: {e}")
                    continue
                    # 尝试点击下一页,如果找不到则跳出循环
            try:
                dp.ele('css:.pn-next').click()
            except Exception as e:
                print(f"No more pages: {e}")
                break
            # 输入商品关键字
shop = input("请输入你想爬取的商品信息:")
scrape_jd(shop)

京东评论数据集:

例:

番茄汁评论数据集

爬取京东评论代码:

import time
import re
from DrissionPage import ChromiumPage
import csv
# 初始化浏览器
dp = ChromiumPage()

#番茄汁
dp.get('https://item.jd.com/1117654.html')

# 打开 CSV 文件,准备写入
with open('番茄汁评论.csv', mode='a', encoding='utf-8', newline='') as f:
    csv_writer = csv.DictWriter(f, fieldnames=['评论内容', '规格', '时间', '地址'])
    csv_writer.writeheader()
    for page in range(100):
        dp.scroll.to_bottom()
        time.sleep(3)  # 确保页面加载完成
        # 提取评论项
        lis = dp.eles('css:.comment-item')
        for div in lis:
            try:
                # 从当前评论块中提取信息
                vip = div.ele('css:.comment-plus-icon').text
                comment = div.ele('css:.comment-con').text
                order = div.ele('css:.order-info').text

                # 正则表达式拆分
                match = re.match(r"(.+?)(\d+g\*\d+罐)(\d{4}-\d{2}-\d{2})(.+)", order)
                if match:
                    spec = match.group(2)  # 规格
                    date = match.group(3)  # 时间
                    location = match.group(4)  # 地址
                else:
                    spec, date, location = None, None, None  # 处理没有匹配的情况

                # 打印提取的信息(可选)
                print({

                    '评论内容': comment,
                    '规格': spec,
                    '时间': date,
                    '地址': location
                })

                # 写入 CSV 文件
                csv_writer.writerow({

                    '评论内容': comment,
                    '规格': spec,
                    '时间': date,
                    '地址': location
                })

            except Exception as e:
                print(f"提取信息时出错:{e}")

        # 尝试点击下一页按钮
        try:
            next_button = dp.ele('css:.ui-pager-next')
            if "disabled" in next_button.attrs:  # 检查下一页按钮是否禁用
                print("已到最后一页。")
                break
            next_button.click()
            time.sleep(3)  # 等待下一页加载
        except Exception as e:
            print(f"无法点击下一页按钮,可能页面未完全加载或已经到达最后一页。错误信息:{e}")
            break

总结:

通过本文,我们学习了如何使用Python和Selenium来自动化爬取京东淘宝商品信息以及京东评论。这种方法可以应用于各种网站,为数据分析和市场研究提供原始数据

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值