Python爬取淘宝商品信息并生成Excel

供稿:hz-xin.com     日期:2025-01-14
1前言

后台有很多小伙伴私信问我关于python爬虫的知识和学习资源,今天这篇文章就简单介绍下python爬虫的知识点,并以爬取淘宝网的商品信息存到excel表格中进行演示,同样的本文的源码会同步至github,欢迎下载使用。

2爬虫相关知识

在进行爬虫之前,需要先了解一些关于爬虫的基本知识。

首先我们需要先了解下爬虫的基本原理:

基本的网页请求的过程都可以分为以下两个步骤:

1、Request(请求):每一个展示在用户面前的网页都必须经过这一步,也就是向服务器发送访问请求。

2、Response(响应):服务器在接收到用户的请求后,会验证请求的有效性,然后向用户(客户端)发送响应的内容,客户端接收服务器响应的内容,将内容展示出来(即网页),如下图所示。

网页请求的方式也分为两种:

1、GET:最常见的方式,一般用于获取或者查询资源信息,也是大多数网站使用的方式,响应速度快。

2、POST:相比GET方式,多了以表单形式上传参数的功能,因此除查询信息外,还可以修改信息。

所以,在写爬虫前我们要先确定向谁发送请求,并且用什么方式发送。

向谁发送请求,那我们就需要了解请求的url地址,以淘宝网的眼镜的url为例:

https://s.taobao.com/search?q=%E7%9C%BC%E9%95%9C&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306

这里眼镜中文被转义了:

这里我们只需要知道q后面的值就是我们搜索的商品的名字就可以了,后面其他的参数这里暂时对我们没用。

因为爬虫并不只爬取一页的信息,我们跳转到下一页:

可以发现s的值=44*(页码-1)。

接着ctrl+U组合键打开源码,可以发现有一个g_page_config的json串,里面的data值如下:

,"data":{"postFeeText":"运费","trace":"msrp_auction","auctions":[{"p4p":1,"p4pSameHeight":true,"nid":"536766094512","category":"","pid":"","title":"近视\u003cspanclass\u003dH\u003e眼镜\u003c/span\u003e男有度数超轻全框\u003cspanclass\u003dH\u003e眼镜\u003c/span\u003e框半框舒适可配\u003cspanclass\u003dH\u003e眼镜\u003c/span\u003e防雾眼睛近视镜","raw_title":"丹阳眼镜眼镜框眼镜架眼睛框防辐射光学镜","pic_url":"//g-search1.alicdn.com/img/bao/uploaded/i4/imgextra/i2/104870285060645671/TB2ulgla4vzQeBjSZPfXXbWGFXa_!!0-saturn_solar.jpg"

这里postFeeText即为运费,raw_title为标题,pic_url即为展示图片的地址,

view_price:运费;

nick:商铺的名称;

item_loc:地址;

view_sales:销售量。

以上的数据即对应下面的这些信息:

请求方式可以F12,然后再network--->headers--->requestMethod找到:

在了解上面的基本内容之后我们就可以写一个小型的爬虫了,比如下面的代码:

#导入requests包importrequestsurl='https://s.taobao.com/search?q=%E7%9C%BC%E9%95%9C&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=3&ntoffset=3&p4ppushleft=1%2C48&s=44'#Get方式获取网页数据strhtml=requests.get(url)print(strhtml.text)

这样就将页面的内容获取并以html的格式展示出来了。

使用requests库请求网站加载库使用的语句是import+库的名字。在上述过程中,加载requests库的语句是:importrequests。

用GET方式获取数据需要调用requests库中的get方法,使用方法是在requests后输入英文点号,如下所示:

requests.get

将获取到的数据存到strhtml变量中,代码如下:

strhtml=request.get(url)

这个时候strhtml是一个URL对象,它代表整个网页,但此时只需要网页中的源码,下面的语句表示网页源码:

strhtml.text3实战

接下来我们完整的爬取淘宝的信息,主要爬取的信息是:商品名称、店铺名称、价格、地区、付款人数。

首先我们定义一个函数获取请求的url:

#前面介绍q即为查询的商品的名称,所以这里定义为变量,方便后面重复使用defGeturls(q,x):url="https://s.taobao.com/search?q="+q+"&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm"\"=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306"urls=[]urls.append(url)ifx==1:returnurlsforiinrange(1,x):url="https://s.taobao.com/search?q="+q+"&commend=all&ssid=s5-e&search_type=item"\"&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306"\"&bcoffset=3&ntoffset=3&p4ppushleft=1%2C48&s="+str(i*44)urls.append(url)returnurls

然后定义一个函数来获取html的页面:

defGetHtml(url):#这里的请求get请求r=requests.get(url,headers=headers)r.raise_for_status()r.encoding=r.apparent_encodingreturnr

然后定义一个函数获取商品的信息并插入excel:

首先介绍一个re库:

re库是python的标准库

re库采用rawstring类型表示正则表达式,表示为:r'test'

原生字符串(rawstring)是不包含转义符的字符串。

Re库主要功能函数如下:

这里我们使用findall()函数提取信息,比如:

a=re.findall(r'"raw_title":"(.*?)"',html)defGetandintoExcel(html):globalcount#商品名称a=re.findall(r'"raw_title":"(.*?)"',html)#店铺名称b=re.findall(r'"nick":"(.*?)"',html)#商品价格c=re.findall(r'"view_price":"(.*?)"',html)#地区d=re.findall(r'"item_loc":"(.*?)"',html)#销售量e=re.findall(r'"view_sales":"(.*?)"',html)x=[]foriinrange(len(a)):try:x.append((a[i],b[i],c[i],d[i],e[i]))exceptIndexError:breaki=0foriinrange(len(x)):worksheet.write(count+i+1,0,x[i][0])worksheet.write(count+i+1,1,x[i][1])worksheet.write(count+i+1,2,x[i][2])worksheet.write(count+i+1,3,x[i][3])worksheet.write(count+i+1,4,x[i][4])count=count+len(x)returnprint("数据爬取完成")

主函数如下:

,"data":{"postFeeText":"运费","trace":"msrp_auction","auctions":[{"p4p":1,"p4pSameHeight":true,"nid":"536766094512","category":"","pid":"","title":"近视\u003cspanclass\u003dH\u003e眼镜\u003c/span\u003e男有度数超轻全框\u003cspanclass\u003dH\u003e眼镜\u003c/span\u003e框半框舒适可配\u003cspanclass\u003dH\u003e眼镜\u003c/span\u003e防雾眼睛近视镜","raw_title":"丹阳眼镜眼镜框眼镜架眼睛框防辐射光学镜","pic_url":"//g-search1.alicdn.com/img/bao/uploaded/i4/imgextra/i2/104870285060645671/TB2ulgla4vzQeBjSZPfXXbWGFXa_!!0-saturn_solar.jpg"0

最后运行程序:

以上就是如何使用python爬取淘宝信息的内容,全部代码如下:

importreimportrequestsimportxlsxwriterimporttimeimportmathdefGeturls(q,x):url="https://s.taobao.com/search?q="+q+"&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm"\"=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306"urls=[]urls.append(url)ifx==1:returnurlsforiinrange(1,x):url="https://s.taobao.com/search?q="+q+"&commend=all&ssid=s5-e&search_type=item"\"&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306"\"&bcoffset=3&ntoffset=3&p4ppushleft=1%2C48&s="+str(i*44)urls.append(url)returnurlsdefGetHtml(url):r=requests.get(url,headers=headers)r.raise_for_status()r.encoding=r.apparent_encodingreturnrdefGetandintoExcel(html):globalcounta=re.findall(r'"raw_title":"(.*?)"',html)b=re.findall(r'"nick":"(.*?)"',html)c=re.findall(r'"view_price":"(.*?)"',html)d=re.findall(r'"item_loc":"(.*?)"',html)e=re.findall(r'"view_sales":"(.*?)"',html)x=[]foriinrange(len(a)):try:x.append((a[i],b[i],c[i],d[i],e[i]))exceptIndexError:breaki=0foriinrange(len(x)):worksheet.write(count+i+1,0,x[i][0])worksheet.write(count+i+1,1,x[i][1])worksheet.write(count+i+1,2,x[i][2])worksheet.write(count+i+1,3,x[i][3])worksheet.write(count+i+1,4,x[i][4])count=count+len(x)returnprint("数据爬取完成")if__name__=="__main__":count=0headers={"user-agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.149Safari/537.36","cookie":"t=dc3b73639f4d5652aee8e9f52d7d0c41;sgcookie=E100VfIm5WNNIHQbxK40GoWlA%2BiEh8%2BL3IfWZ8gaPQLmeINstkbFpvtbviklWcVtFdWGQqp2UpMRm4mVXJeOwD1RzA%3D%3D;tracknick=%5Cu5C0F%5Cu5C0F%5Cu5C0F%5Cu5C0F%5Cu54466;_cc_=UtASsssmfA%3D%3D;thw=cn;enc=l%2Fjb6N5FBl9K0ekOiije0dOrXynlA1PT6kAWiXlE8MP7XwVwWABeB1r%2F4%2FN%2FROmEcqBpM4Uk%2FlCcbvHxEX4HhA%3D%3D;cna=E7gdGOrz1lwCAXOs+dCyLVoL;_m_h5_tk=b3004b87cb6eecc0cc7c7154acf7a244_1606566002810;_m_h5_tk_enc=082f300176ed45b823551f15ca981ee0;cookie2=2c290690f10861f7bdd981cba5ac078f;v=0;_tb_token_=0a7840e5536b;JSESSIONID=CE9BABF53453F46B8B6A2FAA274428C1;alitrackid=www.taobao.com;lastalitrackid=www.taobao.com;hng=CN%7Czh-CN%7CCNY%7C156;xlly_s=1;_samesite_flag_=true;tfstk=cVuOB9wPApvG8ZVKacKhcclUWCOhZtfTn1wAkQuqyoMJW-7AiGgoy0ZkfSPvIBC..;l=eBjdYUdPOiL-FAJDBOfwourza77OSIRAguPzaNbMiOCPOZCp53UFWZR2YsT9C3GVh6RXR3rEk3ObBeYBqIv4n5U62j-la_kmn;isg=BE5OFMfVnXt4DynJaP_rUvlZnyQQzxLJN80UA3iXutEM2-414F9i2fSZEwe3Qwrh"}q=input("你想爬取的商品是:")x=int(input("你想爬取几页数据:"))urls=Geturls(q,x)workbook=xlsxwriter.Workbook(q+".xlsx")worksheet=workbook.add_worksheet()worksheet.set_column('A:A',70)worksheet.set_column('B:B',40)worksheet.set_column('C:C',20)worksheet.set_column('D:D',20)worksheet.set_column('E:E',20)worksheet.write('A1','商品名称')worksheet.write('B1','店铺名称')worksheet.write('C1','价格')worksheet.write('D1','地区')worksheet.write('E1','付款人数')xx=[]forurlinurls:html=GetHtml(url)s=GetandintoExcel(html.text)time.sleep(5)workbook.close()4再说一句:反爬虫

最后说一下爬虫的合法性。几乎每一个网站都有一个名为robots.txt的文档,当然也有部分网站没有设定robots.txt。对于没有设定robots.txt的网站可以通过网络爬虫获取没有口令加密的数据,也就是该网站所有页面数据都可以爬取。如果网站有robots.txt文档,就要判断是否有禁止访客获取的数据。以百度为例,在浏览器中访问https://www.baidu.com/robots.txt。

可以看到百度可以允许部分爬虫访问它的部分路径,而对于没有得到允许的用户,则全部禁止爬取的,代码如下:

,"data":{"postFeeText":"运费","trace":"msrp_auction","auctions":[{"p4p":1,"p4pSameHeight":true,"nid":"536766094512","category":"","pid":"","title":"近视\u003cspanclass\u003dH\u003e眼镜\u003c/span\u003e男有度数超轻全框\u003cspanclass\u003dH\u003e眼镜\u003c/span\u003e框半框舒适可配\u003cspanclass\u003dH\u003e眼镜\u003c/span\u003e防雾眼睛近视镜","raw_title":"丹阳眼镜眼镜框眼镜架眼睛框防辐射光学镜","pic_url":"//g-search1.alicdn.com/img/bao/uploaded/i4/imgextra/i2/104870285060645671/TB2ulgla4vzQeBjSZPfXXbWGFXa_!!0

Python爬取淘宝商品信息并生成Excel
接下来我们完整的爬取淘宝的信息,主要爬取的信息是:商品名称、店铺名称、价格、地区、付款人数。 首先我们定义一个函数获取请求的url:#前面介绍q即为查询的商品的名称,所以这里定义为变量,方便后面重复使用defGeturls(q,x):url="https:\/\/s.taobao.com\/search?q="+q+"&imgfile=&commend=all&ssid=s5-e&searc...

Python爬虫实例(三)||爬取淘宝商品信息
爬取单页数据时,需先找到加载数据URL,通常在网页中输入商品名称后,返回的商品信息数据会嵌入到网页中,而非直接以纯json形式返回。发现第二页请求返回纯json数据后,通过比较两次请求url,找到了只返回json数据的参数。为了跳过滑块问题,选择类似第一页的请求接口,然后提取商品属性,最后使用pandas库将数...

python如何采集淘宝、京东的商品数据
1. 使用Requests库发起HTTP请求 首先,利用requests库向淘宝或京东发送HTTP请求,获取页面内容。例如:注意,这里的商品名称部分需替换为你实际想搜索的商品名称。2. 使用BeautifulSoup解析HTML 接下来,用BeautifulSoup或其他HTML解析库解析获取的HTML内容,提取商品信息。示例如下:选择器(class_='item' 或 c...

Python爬取淘宝商品数据,价值千元的爬虫外包项目
Python爬取淘宝商品数据的详细步骤如下:1. **Selenium简介**:Selenium是一个用于Web自动化测试的强大工具。它能模拟用户操作,自动化执行浏览过程,如同真正用户在操作浏览器。2. **安装Selenium**:首先确保安装了Selenium库。可直接通过pip命令安装。3. **配置浏览器驱动**:下载并解压浏览器驱动(如...

【Python3网络爬虫开发实战】使用Selenium爬取淘宝商品
本文介绍使用Selenium爬取淘宝商品信息,并保存至MongoDB。首先,需确保已安装Chrome浏览器、ChromeDriver、Python的Selenium库以及PhantomJS、Firefox和其对应Driver。接着,分析淘宝接口和页面结构,发现通过构造URL参数,可直接抓取商品信息,无需关注复杂接口参数。页面分析显示,商品信息位于商品列表中,通过跳转...

Python爬取淘宝2000款避孕套商品信息
淘宝商品信息爬取分为两步,一是爬取单页数据,二是批量爬取。爬取单页数据时,通过观察网页网络请求,发现搜索结果以json格式返回,但第一页请求结果不直接是json数据,而是包含在HTML中。为获取纯json数据,需在请求参数中添加ajax=true。然而,直接请求json数据时,发现返回链接而非json,由于滑块验证...

爬虫之牛刀小试(十):爬取某宝手机商品的销量,价格和店铺
登录淘宝,无论是通过手动操作还是使用selenium,登录后,我们需要找到商品输入框和搜索按钮。输入关键词“手机”,点击搜索。搜索后,定位到商品容器。使用Python的pyquery库解析HTML,找到匹配特定CSS选择器的div元素,即商品容器。通过items()方法获取所有匹配元素,用于进一步操作。找到商品详情页中的输入框和...

爬虫之牛刀小试(十):爬取某宝手机商品的销量,价格和店铺
在爬取淘宝手机商品信息时,登录机制是一个挑战。selenium虽然可以实现登录,但可能需要手动操作,而cookies登录则需处理复杂的验证码。一旦登录成功,定位商品信息是关键。使用Python的pyquery库,通过CSS选择器找到特定的父类容器,如`.items()`中的匹配元素,逐级查找,找到商品标题和搜索区域。使用...

使用Python 爬取 京东 ,淘宝。 商品详情页的数据。(避开了反爬虫机制...
为了同时爬取京东和淘宝的商品详情页数据,代码中加入了区分京东和淘宝链接的功能。淘宝存在两个主要问题:一是需要账号登录访问,这在代码中设为断点,等待手动授权;二是数据通过休息和懒惰加载呈现,对此无需担心,因为页面结构已经加载,且不会影响其他页面的访问。对于懒惰加载的数据,如果不在src中直接...

利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程
注:本项目仅以以上几项分析为例。项目步骤 1. 数据采集:Python爬取淘宝网商品数据。2. 数据清洗和处理。3. 文本分析:jieba分词、wordcloud可视化。4. 数据柱形图可视化barh。5. 数据直方图可视化hist。6. 数据散点图可视化scatter。7. 数据回归分析可视化regplot。工具&模块:工具:本案例代码编辑工具...