python爬虫实战:妈妈再也不担心我爬取不到淘宝商品信息了

前言

一、解析淘宝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领取。

本文章素材来源于网络,如有侵权请联系删除。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342