问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2024-09-29 08:25

我来回答

1个回答

热心网友 时间:2024-12-03 07:19

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
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
华为freebuds4i切歌怎么操作_华为freebuds4i怎么切歌 华为freebuds pro切歌方法_华为freebuds pro怎么切歌 华为耳机怎么切换下一曲 欧美电影,好像是宠物有一个世界,宠物会想办法跟主人的灵魂互换占据 ...的名字,欧洲中世纪,一个王子的继母把他的灵魂和狗的灵魂互换了... 问一部外国电影的名字 剧情记得不大清楚l了 是前几年的片子 灵魂互换的... HUAWEI 华为 AGS2-W09 10.1英寸平板电脑 (香槟金、64GB+4GB、WiFi版... 诛仙3百法和千法差距大吗 微信怎么解除应用授权登录 授权应用删除方法 微信怎么解除应用授权登录授权应用删除方法 淘宝无理由退货对买家有影响吗 七天无理由退货对买家有什么影响呢? window.open方法能在本窗口打开一个新页面吗? window.open怎样传参数 如何加入别人创建的微信群? window.open参数详解附实例 苏州南站有没有直达渐江嘉兴乍浦镇的车 吃了不太熟的猕猴桃会怎么样 从平湖市林埭镇虹倪村到嘉兴火车站怎么走,明天的火车票。求详细答案 猕猴桃没熟吃了会怎样,吃了没熟的猕猴桃怎么办 四川话 "舅子婆娘“什么意思?? 求问,我在顺丰干了3年,为啥离职证明上写了不到一年?对我后期找工作有... 顺丰离职证明 股转系统的股票怎么交易 股转系统干什么的 股转系统是什么意思啊 西门子滚筒洗衣机儿童锁是怎么回事? 如何消除滚筒洗衣机儿童锁 怎样解除海尔滚筒洗衣机的儿童锁 海尔滚筒洗衣机儿童锁在哪里? 深圳金燕来商贸有限公司龙华山姆经营部怎么样? 西安浦耘商贸有限公司怎么样? 塑料卡板的优点有哪些? 河南结婚女方陪嫁什么河南女能娶吗 贵州特色灰粽子的做法是什么? 公司必须给职工缴纳公积金与社保吗 社保包含哪些公积金吗 雅盈是什么意思? 系统集成项目管理工程师含金量 日本进口花王纸尿裤真假辨别 科比7代鞋码的问题? 有钱花里面有额度为什么借不了怎么办?怎么解决? 用微波炉就能做的甜品 2024年属兔戴什么最旺财运 舱位b是什么意思? 怎么查询4,6级考试成绩 电脑无法重装系统原因 报单是什么意思报单的解释 换手率15说明什么 换手率15%意味着什么 换手率15%意味着什么意思