淘宝,京东,京东评论爬虫项目
在当今数据驱动的世界中,自动化数据收集已成为一项重要技能。无论是市场研究、价格比较还是库存管理,自动化爬虫都能提供巨大的帮助。本文将介绍如何使用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来自动化爬取京东,淘宝商品信息以及京东评论。这种方法可以应用于各种网站,为数据分析和市场研究提供原始数据。