python爬蟲 爬取淘寶網頁資料
阿新 • • 發佈:2019-02-04
O、requests 和 re 庫的介紹
requests庫 是一個小型好用的網頁請求模組,可用於網頁請求,常用來編寫小型爬蟲
安裝requests可以使用pip命令:
在命令列輸入 pip install requests
re庫是正則表示式庫,是python的標準庫
一、分析網頁地址和原始碼
1.首先用chrome瀏覽器進入淘寶商品頁面,檢視網頁地址
分析可得查詢商品的地址為
keyword 為所查詢商品的名稱
2.右擊,點選檢視原始碼
分析原始碼
可以得到商品的名稱為 “raw_title”: 後面的字串
可以得到商品的價格為 “view_price”: 後面的字串
思路:
可以用正則表示式匹配 “raw_title”: 和 “view_price”:後的字串
二、分析寫出爬蟲所需函式框架
getHTMLText(url)解析
傳入一個url 用requests庫請求網頁並返回網頁原始碼文字。2.parsePage(infoList, html) 解析
傳入一個列表和 html程式碼,
用正則表示式解析出商品名稱和價格,
並儲存在infoList列表中。
3.printGoodList(infoList) 解析
用一定的格式將商品的名稱和價格打印出來。4.main() 解析
主函式,程式執行的起點,呼叫以上函式組裝成一個爬蟲。
keyword : 所要查詢的關鍵字
deep: 一次查詢所要查詢的頁數
三、使用requests + re 對函式進行具體實現,寫出原始碼
程式碼如下:
#定向爬取淘寶商品頁面
import requests
import re
def getHTMLText(url):
"""提取頁面HTML程式碼,並返回HTML文字"""
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
print("頁面提取錯誤")
return ""
def parsePage(infoList, html):
"""解析頁面,將[價格,名字] 存入列表"""
try:
#分析網頁原始碼解析出價格
price = re.findall(r'\"view_price\":\"\d+\.\d+?"',html)
title = re.findall(r'\"raw_title\":\".+?\"',html)
#test this re
#print(price)
#print(title)
for i in range(len(price)):
_price = eval(price[i].split(':')[1])
_title = eval(title[i].split(':')[1])
infoList.append([_price, _title])
except:
print('頁面解析錯誤')
def printGoodsList(infoList):
"""將解析好的商品頁面打印出來"""
tplt = '{:^4}\t{:^6}\t{:^10}'
print(tplt.format("數量","價格", "名字"))
count = 0
for goods in infoList:
count+=1
print(tplt.format(count,goods[0], goods[1]))
def main():
keyword = "電腦"
deep = 1 #頁數
url = 'https://s.taobao.com/search?q=' + keyword
infoList = []
for i in range(deep):
_url = url + '&s=' + str(i*44)
text = getHTMLText(_url)
parsePage(infoList, text)
printGoodsList(infoList)
main()
四、程式執行的部分結果展示
想學習更多python技術可以關注我的公眾號
定期分享python技術類文章