python re正則表達(dá)式模擬淘寶搜索商品信息

1.開始前準(zhǔn)備

1.1?python3淹禾,本文代碼使用Python3來寫雪标。沒有安裝Python3的童鞋請(qǐng)先安裝Python3哦

1.2?requests庫筷狼,Requests 是用Python語言編寫动看,基于 urllib,采用 Apache2 Licensed 開源協(xié)議的 HTTP 庫洞慎。它比 urllib 更加方便痛单,可以節(jié)約我們大量的工作,完全滿足 HTTP 測(cè)試需求劲腿。

下載方法:

pip install requests

1.3 pycharm旭绒,一款功能強(qiáng)大的PythonIDE!下載官方版本后焦人,使用license sever免費(fèi)使用(同系列產(chǎn)品類似)挥吵,具體參照http://www.cnblogs.com/hanggegege/p/6763329.html

2.爬取分析

我們的目標(biāo)是實(shí)現(xiàn)一個(gè)能夠代替淘寶搜索獲取商品信息的腳本花椭,那么我們先來分析分析具體應(yīng)該如何實(shí)現(xiàn)吧忽匈!

我們嘗試一下通過網(wǎng)頁上的“搜索”按鈕來獲取一些信息。我們隨便輸入一個(gè)商品名稱:電腦

重復(fù)幾次相同操作查詢不同名稱商品后矿辽,我們發(fā)現(xiàn)了一些規(guī)律丹允,通過觀察url參數(shù)我們發(fā)現(xiàn),只要在https://s.taobao.com/search?q=后面加上你需要查詢的商品名稱就能獲取你想要的淘寶商品信息了袋倔!我們就以這個(gè)為突破口嫌松,去寫目標(biāo)腳本吧!

3.代碼過程分析與演示

首先我們導(dǎo)入所需要的庫:

import requests

import re

我們先來看看電腦信息頁面的源代碼奕污,去發(fā)現(xiàn)其中商品信息的規(guī)律,再用正則表達(dá)式去實(shí)施全局匹配液走,右鍵上圖頁面查看源代碼:

仔細(xì)觀察這段代碼碳默,通過對(duì)一組數(shù)據(jù)的分析得到:商品名稱在raw_title當(dāng)中,商品價(jià)格view_price當(dāng)中缘眶,通過這個(gè)規(guī)律 嘱根,我們來寫兩個(gè)正則表達(dá)式,匹配頁面上的所有商品價(jià)格與名稱巷懈!

我們先來寫個(gè)函數(shù)獲取網(wǎng)頁代碼信息:

def getHTMLText(url):

? ? try:

? ? ? ? r = requests.get(url)

? ? ? ? r.raise_for_status()

? ? ? ? r.encoding = r.apparent_encoding

? ? ? ? return r.text #這幾行不懂的可以去查查requests庫的文檔哦

? ? except:

? ? ? ? return ""

接著该抒,我們?cè)賹憘€(gè)函數(shù)把獲取商品信息:

def parsePage(ilt, html):

? ? try:

? ? ? ? plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html)? #本文代碼的精髓就在這兩行了

? ? ? ? tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)

? ? ? ? for i in range(len(plt)):

? ? ? ? ? ? price = eval(plt[i].split(':')[1])

? ? ? ? ? ? title = eval(tlt[i].split(':')[1])

? ? ? ? ? ? ilt.append([price, title])

? ? except:

? ? ? ? print("")

最后,我們需要寫個(gè)函數(shù)把商品信息列出來:

def printGoodsList(ilt):

? ? tplt = "{:4}\t{:8}\t{:16}"

? ? print(tplt.format("序號(hào)", "價(jià)格", "商品名稱"))

? ? count = 0

? ? for g in ilt:

? ? ? ? count = count + 1

? ? ? ? print(tplt.format(count, g[0], g[1]))

現(xiàn)在我們來寫個(gè)main()函數(shù)來測(cè)試我們的代碼吧顶燕!

def main():

? ? goods = input('請(qǐng)輸入要查找的商品名稱:')

? ? depth = 3? ? ? ? ? ? #爬取的頁碼深度凑保,可以自己調(diào)哦

? ? start_url = 'https://s.taobao.com/search?q=' + goods

? ? infoList = []

? ? for i in range(depth):

? ? ? ? try:

? ? ? ? ? ? url = start_url + '&s=' + str(44 * i)? #去翻頁看看url的變化就知道為什么這么些了

? ? ? ? ? ? html = getHTMLText(url)

? ? ? ? ? ? parsePage(infoList, html)

? ? ? ? except:

? ? ? ? ? ? continue

? ? printGoodsList(infoList)

項(xiàng)目完整代碼:

import requests

import re

def getHTMLText(url):

? ? try:

? ? ? ? r = requests.get(url, timeout=30)

? ? ? ? r.raise_for_status()

? ? ? ? r.encoding = r.apparent_encoding

? ? ? ? return r.text

? ? except:

? ? ? ? return ""

def parsePage(ilt, html):

? ? try:

? ? ? ? plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html)

? ? ? ? tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)

? ? ? ? for i in range(len(plt)):

? ? ? ? ? ? price = eval(plt[i].split(':')[1])

? ? ? ? ? ? title = eval(tlt[i].split(':')[1])

? ? ? ? ? ? ilt.append([price, title])

? ? except:

? ? ? ? print("")

def printGoodsList(ilt):

? ? tplt = "{:4}\t{:8}\t{:16}"

? ? print(tplt.format("序號(hào)", "價(jià)格", "商品名稱"))

? ? count = 0

? ? for g in ilt:

? ? ? ? count = count + 1

? ? ? ? print(tplt.format(count, g[0], g[1]))

def main():

? ? goods = input('請(qǐng)輸入要查找的商品名稱:')

? ? 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)

? ? ? ? ? ? html = getHTMLText(url)

? ? ? ? ? ? parsePage(infoList, html)

? ? ? ? except:

? ? ? ? ? ? continue

? ? printGoodsList(infoList)

main()

我們來看看運(yùn)行效果圖:

大功告成冈爹!

(ps:本文代碼參照中國慕課網(wǎng)課程)

謝謝觀看!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末欧引,一起剝皮案震驚了整個(gè)濱河市频伤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芝此,老刑警劉巖憋肖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異婚苹,居然都是意外死亡岸更,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門膊升,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怎炊,“玉大人,你說我怎么就攤上這事用僧〗嵴停” “怎么了从撼?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵颊亮,是天一觀的道長。 經(jīng)常有香客問我凯正,道長院仿,這世上最難降的妖魔是什么秸抚? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮歹垫,結(jié)果婚禮上剥汤,老公的妹妹穿的比我還像新娘。我一直安慰自己排惨,他們只是感情好吭敢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著暮芭,像睡著了一般鹿驼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辕宏,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天畜晰,我揣著相機(jī)與錄音,去河邊找鬼瑞筐。 笑死凄鼻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播块蚌,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼闰非,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了匈子?” 一聲冷哼從身側(cè)響起河胎,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎虎敦,沒想到半個(gè)月后游岳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡其徙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年胚迫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唾那。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡访锻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闹获,到底是詐尸還是另有隱情期犬,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布避诽,位于F島的核電站龟虎,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏沙庐。R本人自食惡果不足惜鲤妥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拱雏。 院中可真熱鬧棉安,春花似錦、人聲如沸铸抑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹊汛。三九已至菇爪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柒昏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工熙揍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留职祷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像有梆,于是被迫代替她去往敵國和親是尖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容