前言
一、解析淘宝URL组成
二、查看网页源码并用re库提取信息
1.查看源码
2.re库提取信息
三:函数填写
四:主函数填写
五:完整代码
如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python圈,裙号947618024,可领取python学习资料,会节约很多时间,减少很多遇到的难题。
前言
本文简单使用python的requests库及re正则表达式对淘宝的商品信息(商品名称,商品价格,生产地区,以及销售额)进行了爬取,并最后用xlsxwriter库将信息放入Excel表格。最后的效果图如下:
提示:以下是本篇文章正文内容
一、解析淘宝URL组成
1.我们的第一个需求就是要输入商品名字返回对应的信息
所以我们这里随便选一个商品来观察它的URL,这里我们选择的是书包,打开网页,可知他的URL为:
https://s.taobao.com/search?q=%E4%B9%A6%E5%8C%85&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
可能单单从这个url里我们看不出什么,但是我们可以从图中看出一些端倪
我们发现q后面的参数就是我们要获取的物品的名字
2.我们第二个需求就是根据输入的数字来爬取商品的页码
所以我们来观察一下后面几页URL的组成
由此我们可以得出分页的依据是最后s的值=(44(页数-1))
二、查看网页源码并用re库提取信息
1.查看源码
这里的几个信息都是我们所需要的
2.re库提取信息
a = re.findall(r'"raw_title":"(.*?)"', html) b = re.findall(r'"view_price":"(.*?)"', html) c = re.findall(r'"item_loc":"(.*?)"', html) d = re.findall(r'"view_sales":"(.*?)"', html)1234
三:函数填写
这里我写了三个函数,第一个函数来获取html网页,代码如下:
defGetHtml(url):r = requests.get(url,headers =headers) r.raise_for_status() r.encoding = r.apparent_encodingreturnr12345
第二个用于获取网页的URL代码如下:
def Geturls(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:returnurlsfori inrange(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)returnurls1234567891011121314
第三个用于获取我们需要的商品信息并写入Excel表格代码如下:
defGetxxintoExcel(html):globalcount#定义一个全局变量count用于后面excel表的填写a = re.findall(r'"raw_title":"(.*?)"', html)#(.*?)匹配任意字符b = re.findall(r'"view_price":"(.*?)"', html) c = re.findall(r'"item_loc":"(.*?)"', html) d = re.findall(r'"view_sales":"(.*?)"', html) x = []foriinrange(len(a)):try: x.append((a[i],b[i],c[i],d[i]))#把获取的信息放入新的列表中exceptIndexError:breaki =0foriinrange(len(x)): worksheet.write(count + i +1,0, x[i][0])#worksheet.write方法用于写入数据,第一个数字是行位置,第二个数字是列,第三个是写入的数据信息。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]) count = count +len(x)#下次写入的行数是这次的长度+1returnprint("已完成")123456789101112131415161718192021
四:主函数填写
if__name__ =="__main__": count =0headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36","cookie":""#cookie 是每个人独有的,因为反爬机制的缘故,爬取太快可能到后面要重新刷新一下自己的Cookie。 } 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',20) worksheet.set_column('C:C',20) worksheet.set_column('D:D',20) worksheet.write('A1','名称') worksheet.write('B1','价格') worksheet.write('C1','地区') worksheet.write('D1','付款人数')forurlinurls: html = GetHtml(url) s = GetxxintoExcel(html.text)time.sleep(5) workbook.close()#在程序结束之前不要打开excel,excel表在当前目录下12345678910111213141516171819202122232425
五:完整代码
importreimportrequestsimportxlsxwriterimporttimedefGetxxintoExcel(html):globalcount a = re.findall(r'"raw_title":"(.*?)"', html) b = re.findall(r'"view_price":"(.*?)"', html) c = re.findall(r'"item_loc":"(.*?)"', html) d = re.findall(r'"view_sales":"(.*?)"', html) x = []foriinrange(len(a)):try: x.append((a[i],b[i],c[i],d[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]) count = count +len(x)returnprint("已完成")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)returnurlsdefGetHtml(url):r = requests.get(url,headers =headers) r.raise_for_status() r.encoding = r.apparent_encodingreturnrif__name__ =="__main__": count =0headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36","cookie":""} 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',20) worksheet.set_column('C:C',20) worksheet.set_column('D:D',20) worksheet.write('A1','名称') worksheet.write('B1','价格') worksheet.write('C1','地区') worksheet.write('D1','付款人数') xx = []forurlinurls: html = GetHtml(url) s = GetxxintoExcel(html.text) time.sleep(5) workbook.close()123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
觉得写的可以的
最后多说一句,想学习Python可联系小编,这里有我自己整理的整套python学习资料和路线,想要这些资料的都可以进q裙947618024领取。
本文章素材来源于网络,如有侵权请联系删除。