Python通過正則庫爬取淘寶商品信息代碼實例
使用正則庫爬取淘寶商品的商品信息,首先我們需要確定想要爬取的對象
我們在淘寶里搜索“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=”,來設置爬取的深度(爬取多少頁)
右鍵查看源碼,商品名稱可能的關(guān)鍵字是“title”和“raw_title”,進一步多看幾個商品的名稱,發(fā)現(xiàn)選取“raw_title”比較合適;商品價格自然就是“view_price”(通過比對淘寶商品展示頁面);所以商品名稱和商品價格分別是以"raw_title":"名稱"和"view_price":"價格",這樣的鍵/值對的形式展示的。
# 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) # 正則提示商品價格 print(tlist) print(plist) print(type(plist)) # 正則表達式提取出的商品名稱和商品價格都是以列表形式存儲數(shù)據(jù)的
利用for循環(huán),把每個商品的名稱和價格組成一個列表,然后把這寫列表再追加到一個大列表中:
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]) # 把每個商品的名稱和價格組成一個小列表,然后把所有商品組成的列表追加到一個大列表中
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庫解析商品名稱和價格
tlist:商品名稱列表
plist:商品價格列表"""
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控制把爬取到的商品寫進多少到文本中
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) # 因為淘寶顯示每頁44個商品,第一頁i=0,一次遞增
html = get_html(url)
get_data(html, infoList)
except:
continue
write_data(infoList, len(infoList))
if __name__ == '__main__':
main()
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
超詳細PyTorch實現(xiàn)手寫數(shù)字識別器的示例代碼
這篇文章主要介紹了超詳細PyTorch實現(xiàn)手寫數(shù)字識別器的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
Python使用cx_Oracle模塊將oracle中數(shù)據(jù)導出到csv文件的方法
這篇文章主要介紹了Python使用cx_Oracle模塊將oracle中數(shù)據(jù)導出到csv文件的方法,涉及Python中cx_Oracle模塊與csv模塊操作Oracle數(shù)據(jù)庫及csv文件的相關(guān)技巧,需要的朋友可以參考下2015-05-05
python中使用numpy包的向量矩陣相乘np.dot和np.matmul實現(xiàn)
本文主要介紹了python中使用numpy包的向量矩陣相乘np.dot和np.matmul實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02
Python multiprocessing模塊中的Pipe管道使用實例
這篇文章主要介紹了Python multiprocessing模塊中的Pipe管道使用實例,本文直接給出使用實例,需要的朋友可以參考下2015-04-04
python使用tkinter調(diào)整label背景顏色的測試
這篇文章主要介紹了python使用tkinter調(diào)整label背景顏色的測試方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
Python開發(fā)微信公眾平臺的方法詳解【基于weixin-knife】
這篇文章主要介紹了Python開發(fā)微信公眾平臺的方法,結(jié)合實例形式分析了Python基于weixin-knife針對微信公眾平臺消息、接口調(diào)用及事件處理的基本操作技巧與相關(guān)注意事項,需要的朋友可以參考下2017-07-07
python實現(xiàn)zencart產(chǎn)品數(shù)據(jù)導入到magento(python導入數(shù)據(jù))
這篇文章主要介紹了python實現(xiàn)zencart產(chǎn)品數(shù)據(jù)導入到magento(python導入數(shù)據(jù)),需要的朋友可以參考下2014-04-04
Python調(diào)用釘釘自定義機器人的實現(xiàn)
這篇文章主要介紹了Python調(diào)用釘釘自定義機器人的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-01-01

