python爬蟲實(shí)戰(zhàn):媽媽再也不擔(dān)心我爬取不到淘寶商品信息了

前言

一、解析淘寶URL組成

二、查看網(wǎng)頁(yè)源碼并用re庫(kù)提取信息

1.查看源碼

2.re庫(kù)提取信息

三:函數(shù)填寫

四:主函數(shù)填寫

五:完整代碼

如果大家在學(xué)習(xí)中遇到困難,想找一個(gè)python學(xué)習(xí)交流環(huán)境,可以加入我們的python圈,裙號(hào)947618024,可領(lǐng)取python學(xué)習(xí)資料,會(huì)節(jié)約很多時(shí)間,減少很多遇到的難題。

前言

本文簡(jiǎn)單使用python的requests庫(kù)及re正則表達(dá)式對(duì)淘寶的商品信息(商品名稱,商品價(jià)格,生產(chǎn)地區(qū),以及銷售額)進(jìn)行了爬取,并最后用xlsxwriter庫(kù)將信息放入Excel表格。最后的效果圖如下:

提示:以下是本篇文章正文內(nèi)容

一、解析淘寶URL組成

1.我們的第一個(gè)需求就是要輸入商品名字返回對(duì)應(yīng)的信息

所以我們這里隨便選一個(gè)商品來(lái)觀察它的URL,這里我們選擇的是書包,打開(kāi)網(wǎng)頁(yè),可知他的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

可能單單從這個(gè)url里我們看不出什么,但是我們可以從圖中看出一些端倪

我們發(fā)現(xiàn)q后面的參數(shù)就是我們要獲取的物品的名字

2.我們第二個(gè)需求就是根據(jù)輸入的數(shù)字來(lái)爬取商品的頁(yè)碼

所以我們來(lái)觀察一下后面幾頁(yè)URL的組成

由此我們可以得出分頁(yè)的依據(jù)是最后s的值=(44(頁(yè)數(shù)-1))

二、查看網(wǎng)頁(yè)源碼并用re庫(kù)提取信息

1.查看源碼

這里的幾個(gè)信息都是我們所需要的

2.re庫(kù)提取信息

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

三:函數(shù)填寫

這里我寫了三個(gè)函數(shù),第一個(gè)函數(shù)來(lái)獲取html網(wǎng)頁(yè),代碼如下:

defGetHtml(url):r = requests.get(url,headers =headers)? ? r.raise_for_status()? ? r.encoding = r.apparent_encodingreturnr12345

第二個(gè)用于獲取網(wǎng)頁(yè)的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

第三個(gè)用于獲取我們需要的商品信息并寫入Excel表格代碼如下:

defGetxxintoExcel(html):globalcount#定義一個(gè)全局變量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方法用于寫入數(shù)據(jù),第一個(gè)數(shù)字是行位置,第二個(gè)數(shù)字是列,第三個(gè)是寫入的數(shù)據(jù)信息。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)#下次寫入的行數(shù)是這次的長(zhǎng)度+1returnprint("已完成")123456789101112131415161718192021

四:主函數(shù)填寫

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 是每個(gè)人獨(dú)有的,因?yàn)榉磁罊C(jī)制的緣故,爬取太快可能到后面要重新刷新一下自己的Cookie。? ? ? ? ? ? ? ? }? ? q =input("輸入貨物")? ? x = int(input("你想爬取幾頁(yè)"))? ? 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','價(jià)格')? ? worksheet.write('C1','地區(qū)')? ? worksheet.write('D1','付款人數(shù)')forurlinurls:? ? ? ? html = GetHtml(url)? ? ? ? s = GetxxintoExcel(html.text)time.sleep(5)? ? workbook.close()#在程序結(jié)束之前不要打開(kāi)excel,excel表在當(dāng)前目錄下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("你想爬取幾頁(yè)"))? ? 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','價(jià)格')? ? worksheet.write('C1','地區(qū)')? ? worksheet.write('D1','付款人數(shù)')? ? xx = []forurlinurls:? ? ? ? html = GetHtml(url)? ? ? ? s = GetxxintoExcel(html.text)? ? ? ? time.sleep(5)? ? workbook.close()123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

覺(jué)得寫的可以的

最后多說(shuō)一句,想學(xué)習(xí)Python可聯(lián)系小編,這里有我自己整理的整套python學(xué)習(xí)資料和路線,想要這些資料的都可以進(jìn)q裙947618024領(lǐng)取。

本文章素材來(lái)源于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系刪除。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容