Python通過正則庫爬取淘寶商品信息代碼實(shí)例
使用正則庫爬取淘寶商品的商品信息,首先我們需要確定想要爬取的對象
我們在淘寶里搜索“python”,出來的結(jié)果
從url連接中可以得到搜索商品的關(guān)鍵字是“q=”,所以我們要用的起始url為:https://s.taobao.com/search?q=python
然后翻頁,經(jīng)過對比發(fā)現(xiàn),翻頁后,變化的關(guān)鍵字是s,每次翻頁,s便以44的倍數(shù)增長(可以數(shù)一下每頁顯示的商品數(shù)量,剛好是44)
所以可以根據(jù)關(guān)鍵字“s=”,來設(shè)置爬取的深度(爬取多少頁)
右鍵查看源碼,商品名稱可能的關(guān)鍵字是“title”和“raw_title”,進(jìn)一步多看幾個商品的名稱,發(fā)現(xiàn)選取“raw_title”比較合適;商品價(jià)格自然就是“view_price”(通過比對淘寶商品展示頁面);所以商品名稱和商品價(jià)格分別是以"raw_title":"名稱"和"view_price":"價(jià)格",這樣的鍵/值對的形式展示的。
# coding:utf-8 import requests import re goods = '水杯' url = 'https://s.taobao.com/search?q=' + goods r = requests.get(url=url, timeout=10) html = r.text tlist = re.findall(r'\"raw_title\"\:\".*?\"', html) # 正則提取商品名稱 plist = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html) # 正則提示商品價(jià)格 print(tlist) print(plist) print(type(plist)) # 正則表達(dá)式提取出的商品名稱和商品價(jià)格都是以列表形式存儲數(shù)據(jù)的
利用for循環(huán),把每個商品的名稱和價(jià)格組成一個列表,然后把這寫列表再追加到一個大列表中:
goodlist = [] for i in range(len(tlist)): title = eval(tlist[i].split(':')[1]) # eval()函數(shù)簡單說就是用于去掉字符串的引號 price = eval(plist[i].split(':')[1]) goodlist.append([title, price]) # 把每個商品的名稱和價(jià)格組成一個小列表,然后把所有商品組成的列表追加到一個大列表中 print(goodlist)
大概的思路就是這樣的。
def get_html(url): """獲取源碼html""" try: r = requests.get(url=url, timeout=10) r.encoding = r.apparent_encoding return r.text except: print("獲取失敗") def get_data(html, goodlist): """使用re庫解析商品名稱和價(jià)格 tlist:商品名稱列表 plist:商品價(jià)格列表""" tlist = re.findall(r'\"raw_title\"\:\".*?\"', html) plist = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html) for i in range(len(tlist)): title = eval(tlist[i].split(':')[1]) # eval()函數(shù)簡單說就是用于去掉字符串的引號 price = eval(plist[i].split(':')[1]) goodlist.append([title, price]) def write_data(list, num): # with open('E:/Crawler/case/taob2.txt', 'a') as data: # print(list, file=data) for i in range(num): # num控制把爬取到的商品寫進(jìn)多少到文本中 u = list[i] with open('E:/Crawler/case/taob.txt', 'a') as data: print(u, file=data) def main(): goods = '水杯' depth = 3 # 定義爬取深度,即翻頁處理 start_url = 'https://s.taobao.com/search?q=' + goods infoList = [] for i in range(depth): try: url = start_url + '&s=' + str(44 * i) # 因?yàn)樘詫氾@示每頁44個商品,第一頁i=0,一次遞增 html = get_html(url) get_data(html, infoList) except: continue write_data(infoList, len(infoList)) if __name__ == '__main__': main()
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python requests上傳文件實(shí)現(xiàn)步驟
這篇文章主要介紹了Python requests上傳文件實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Blender?Python編程實(shí)現(xiàn)批量導(dǎo)入網(wǎng)格并保存渲染圖像
這篇文章主要為大家介紹了Blender?Python?編程實(shí)現(xiàn)批量導(dǎo)入網(wǎng)格并保存渲染圖像示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08使用python數(shù)據(jù)清洗代碼實(shí)例
這篇文章主要介紹了使用python數(shù)據(jù)清洗代碼實(shí)例,分享一下近期用python做數(shù)據(jù)清洗匯總的相關(guān)代碼,這里我們用到的python包有pandas、numpy、os等,需要的朋友可以參考下2023-07-07python中數(shù)組和矩陣乘法及使用總結(jié)(推薦)
這篇文章主要介紹了python中數(shù)組和矩陣乘法及使用總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05幫你快速上手Jenkins并實(shí)現(xiàn)自動化部署
在未學(xué)習(xí)Jenkins之前,只是對Jenkins有一個比較模糊的理解,即Jenkins是一個自動化構(gòu)建項(xiàng)目發(fā)布的工具,可以實(shí)現(xiàn)代碼->github或者gitlab庫->jenkins自動部署->訪問的整體的過程,而無需人為重新打包,今天就帶大家詳細(xì)了解一下,幫你快速上手Jenkins,需要的朋友可以參考下2021-06-06Python創(chuàng)建相同值數(shù)組/列表的兩種方法
眾所周知數(shù)組是一種用來在計(jì)算機(jī)中存儲連續(xù)的相同類型數(shù)值的數(shù)據(jù)結(jié)構(gòu),這篇文章主要給大家介紹了關(guān)于Python創(chuàng)建相同值數(shù)組/列表的兩種方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(精簡版)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的精簡版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11