Python搜索爬取淘宝商品信息并存储为csv文件(名称、店铺、销量、地址等)

本文介绍了一种在淘宝上搜索商品并爬取相关信息的方法,包括商品名称、店铺名称、销量等,通过将登录后的cookie放入请求头实现搜索,最终将数据存储为csv文件。
部署运行你感兴趣的模型镜像

功能是搜索商品,并把搜到的商品信息一一爬取(多个页面):
爬取商品名称、店铺名称、销量、评论数量、地址等等,然后把信息存储为csv文件…

效果:

首先是程序运行
在这里插入图片描述
运行完后可以看到目录下出现了一个csv文件
在这里插入图片描述
打开看看,还不错
在这里插入图片描述

现在在淘宝搜索需要登录了,所以要把登录成功后得到的cookie塞进请求headers里才行;
我这代码里面的cookie是掏的某位老哥的。。不能保证一直有效,所以最好还是用自己的cookie…

若cookie无效,则可能导致搜索失败,文章尾部会介绍如何使用自己的cookie。

好了话不再多说,直接上代码

import re
import requests
import time


def getNowTime(form='%Y-%m-%d_%H-%M-%S'):
    nowTime = time.strftime(form, time.localtime())
    return nowTime

# 搜索关键字
searchKey = '零食' 
# 输出文件编码(一般是utf-8,不过我用excel打开输出的csv文件发现会乱码,就用了ansi)
encode = 'ansi' 
# keys是我要获取的宝贝信息属性
keys = ('raw_title','view_price','item_loc','view_sales','comment_count','nick')

url = 'https://s.taobao.com/search'
params = {'q':searchKey, 'ie':'utf8'}
header = {
    "cookie":"cna=EYnEFeatJWUCAbfhIw4Sd0GO; x=__ll%3D-1%26_ato%3D0; hng=CN%7Czh-CN%7CCNY%7C156; uc1=cookie14=UoTaHYecARKhrA%3D%3D; uc3=vt3=F8dBy32hRyZzP%2FF7mzQ%3D&lg2=U%2BGCWk%2F75gdr5Q%3D%3D&nk2=1DsN4FjjwTp04g%3D%3D&id2=UondHPobpDVKHQ%3D%3D; t=ad1fbf51ece233cf3cf73d97af1b6a71; tracknick=%5Cu4F0F%5Cu6625%5Cu7EA22013; lid=%E4%BC%8F%E6%98%A5%E7%BA%A22013; uc4=nk4=0%401up5I07xsWKbOPxFt%2BwuLaZ8XIpO&id4=0%40UOE3EhLY%2FlTwLmADBuTfmfBbGpHG; lgc=%5Cu4F0F%5Cu6625%5Cu7EA22013; enc=ieSqdE6T%2Fa5hYS%2FmKINH0mnUFINK5Fm1ZKC0431E%2BTA9eVjdMzX9GriCY%2FI2HzyyntvFQt66JXyZslcaz0kXgg%3D%3D; _tb_token_=536fb5e55481b; cookie2=157aab0a58189205dd5030a17d89ad52; _m_h5_tk=150df19a222f0e9b600697737515f233_1565931936244; _m_h5_tk_enc=909fba72db21ef8ca51c389f65d5446c; otherx=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0; l=cBa4gFrRqYHNUtVvBOfiquI8a17O4IJ51sPzw4_G2ICP9B5DeMDOWZezto8kCnGVL6mpR3RhSKO4BYTKIPaTlZXRFJXn9MpO.; isg=BI6ORhr9X6-NrOuY33d_XmZFy2SQp1Ju1qe4XLjXJRHsGyp1IJ9IG0kdUwfSA0oh",
    "referer":"https://detail.tmall.com/item.htm",
    "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36"
}
startPage = 1 # 起始页面
pageTotal = 3 # 爬取多少页
waitTime = 2 # 等待时间(如果爬的速度太快可能会出事)
rowWrited = 0
startTime = time.time()
print('任务启动\n{} | 初始化存储文件...'.format(getNowTime()))
fileName = r'tb_{}_{}_{}_{}.csv'.format(searchKey, startPage, pageTotal, getNowTime())
with open(fileName, 'w', encoding=encode) as saveFile:
    saveFile.write(','.join(keys) + '\n')

print('关键词:{} 起始页面:{} 爬取页面数:{}, 开始执行..'.format(searchKey, startPage, pageTotal))
for page in range(startPage, pageTotal+1):
    print('\npage{}: 获取数据...'.format(page))
    time.sleep(waitTime)
    params['s'] = str(page * 44) if page > 1 else '1'
    resp = requests.get(url, params, headers=header)
    results = [re.findall(r'"{}":"([^"]+)"'.format(key), resp.text.replace('\n','').replace('\r','').replace(',','').strip(), re.I) for key in keys]
    print('page{}: 正在写入数据...'.format(page))
    with open(fileName, 'a', encoding=encode) as saveFile:
        for row in range(len(results[0])):
            print('\r写入第{}条..'.format(row+1), end='')
            rowWrited += 1
            for key in range(len(results)):
                try:
                    saveFile.write('{}{}'.format(results[key][row], ',' if key+1<len(results) else '\n'))
                except:
                    saveFile.write('null{}'.format(',' if key+1<len(results) else '\n'))
    print('page{}完成...'.format(page, len(results[0])))

print('\n任务完成!! 页面总数: {} | 写入数据: {}条 | 用时: {:.2f}s'.format(pageTotal, rowWrited, time.time()-startTime))


结束


这里介绍如何在代码中使用自己的cookie:

根据我的测试(2019年9月25日),发现需要在请求cookie中加入 enc 字段才可以进行搜索。

1、用浏览器登录淘宝后,开启浏览器开发者工具(F12

2、访问 https://s.taobao.com/search,然后按下图所示找到 enc 字段:

在这里插入图片描述

3、回到py文件,将其加入header字典中的cookie里即可。

不过,由于淘宝经常更新,此方法时效未知。如果不行,就试着把cookie整个丢进去吧…)

结束

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

使用Python爬虫爬取淘宝商品详细信息可按以下步骤进行: ### 1. 导入必要的库 需要导入一些第三方库来辅助完成爬虫任务,如使用`selenium`进行网页操作,`pyquery`用于解析HTML,`openpyxl`用于Excel读写等。 ```python from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from pyquery import PyQuery as pq import time import openpyxl as op ``` 此部分代码功能为基于ChromeDriver爬取淘宝平台商品列表数据,输入参数包括搜索商品“关键词”、爬取起始页和终止页,输出爬取商品列表数据,包含页码、序号、商品标题、价格等信息 [^1]。 ### 2. 处理登录问题 淘宝设置了登录后才可以查看商品信息,增加了爬虫的难度。如果使用`selenium`方法输入账号密码,输入后可能仍需要滑块检验才能登录,若暂时无法处理滑块验证,可手动登录 [^3]。 ### 3. 提取商品信息 使用`BeautifulSoup`或`PyQuery`等工具解析网页,提取所需的商品信息。例如,使用`BeautifulSoup`提取商品的标题、价格和销量: ```python from bs4 import BeautifulSoup import pandas as pd # 假设已经获取到网页内容存储在html变量中 soup = BeautifulSoup(html, 'html.parser') items = soup.find_all('div', class_='item') data = [] for item in items: title = item.find('div', class_='title').text.strip() price = item.find('strong').text.strip() sales = item.find('div', class_='deal-cnt').text.strip() data.append({'标题': title, '价格': price, '销量': sales}) df = pd.DataFrame(data) ``` 该代码找到所有商品信息所在的标签,提取商品标题、价格和销量数据转为`DataFrame`格式 [^2]。 ### 4. 翻页操作 若要爬取多页商品信息,需要实现翻页操作。可使用`selenium`模拟点击下一页按钮,或者根据URL的规律构造下一页的URL [^3]。 ### 5. 数据存储与清洗 爬取到的数据可能需要进行存储和清洗。例如,将数据存储到Excel文件数据库中,对价格、销量、地理位置等数据进行清洗。 ```python import re import pandas as pd # 假设已经将数据存储CSV文件中 data = pd.read_csv("D:/kesci/淘宝食物.csv") # 处理price、deal data['price'] = data['price'].map(lambda x: x.replace('¥', "")) data['deal'] = data['deal'].map(lambda x: float(x.split("万")[0]) * 10000 if '万' in x else float(str(x).replace('+', ''))) # 处理location data['province'] = data['location'].map(lambda x: x.split(" ")[0]) for i in range(len(data)): location = data.loc[i, 'location'].split(" ") if len(location) > 1: data.loc[i, 'city'] = location[1] else: data.loc[i, 'city'] = location[0] data.drop('location', axis=1, inplace=True) ``` 此代码对价格、销量和地理位置数据进行了清洗,去除价格中的`¥`符号,将销量中的“万”转换为具体数字,将地理位置拆分为省份和城市 [^4]。
评论 15
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值