Python網(wǎng)絡(luò)爬蟲(chóng)與信息提取(三):網(wǎng)絡(luò)爬蟲(chóng)之實(shí)戰(zhàn)

此系列筆記來(lái)源于
中國(guó)大學(xué)MOOC-北京理工大學(xué)-嵩天老師的Python系列課程


7. Re(正則表達(dá)式)庫(kù)入門(mén)

regular expression = regex = RE
是一種通用的字符串表達(dá)框架,用來(lái)簡(jiǎn)潔表達(dá)一組字符串的表達(dá)式,也可用來(lái)判斷某字符串的特征歸屬

  • 正則表達(dá)式的語(yǔ)法


    常用操作符1
常用操作符2
實(shí)例

經(jīng)典實(shí)例
  • Re庫(kù)的基本使用

    • 正則表達(dá)式的表示類(lèi)型為raw string類(lèi)型(原生字符串類(lèi)型),表示為r'text'

    • Re庫(kù)主要功能函數(shù)


      功能函數(shù)
      • re.search(pattern,string,flags=0)



      • re.match(pattern,string,flags=0)
        因?yàn)閙atch為從開(kāi)始位置開(kāi)始匹配,使用時(shí)要加if進(jìn)行判別返回結(jié)果是否為空,否則會(huì)報(bào)錯(cuò)


      • re.findall(pattern,string,flags=0)


      • re.split(pattern,string,maxsplit=0,flags=0)
        maxsplit為最大分割數(shù),剩余部分作為最后一個(gè)元素輸出


      • re.finditer(pattern,string,flags=0)


      • re.sub(pattern,repl,string,count=0,flags=0)
        repl是用來(lái)替換的字符串,count為替換次數(shù)


    • Re庫(kù)的另一種等價(jià)用法
      Re庫(kù)的函數(shù)式用法為一次性操作,還有一種為面向?qū)ο笥梅?/strong>,可在編譯后多次操作
      regex = re.compile(pattern,flags=0)
      通過(guò)compile生成的regex對(duì)象才能被叫做正則表達(dá)式

  • Re庫(kù)的match對(duì)象


    Match對(duì)象的屬性
Match對(duì)象的方法
實(shí)例
  • Re庫(kù)的貪婪匹配和最小匹配
    Re庫(kù)默認(rèn)采取貪婪匹配,即輸出匹配最長(zhǎng)的子串


    最小匹配操作符

8.實(shí)例二:淘寶商品比價(jià)定向爬蟲(chóng)(requests-re)

步驟1:提交商品搜索請(qǐng)求,循環(huán)獲取頁(yè)面
步驟2:對(duì)于每個(gè)頁(yè)面,提取商品名稱和價(jià)格信息
步驟3:將信息輸出顯示

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 = '書(shū)包'
    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()

9.實(shí)例三:股票數(shù)據(jù)定向爬蟲(chóng)(requests-bs

4-re)
步驟1:從東方財(cái)富網(wǎng)獲取股票列表
步驟2:根據(jù)股票列表逐個(gè)到百度股票獲取個(gè)股信息
步驟3:將結(jié)果存儲(chǔ)到文件

#CrawBaiduStocksB.py
import requests
from bs4 import BeautifulSoup
import traceback
import re
 
def getHTMLText(url, code="utf-8"):
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = code
        return r.text
    except:
        return ""
 
def getStockList(lst, stockURL):
    html = getHTMLText(stockURL, "GB2312")
    soup = BeautifulSoup(html, 'html.parser') 
    a = soup.find_all('a')
    for i in a:
        try:
            href = i.attrs['href']
            lst.append(re.findall(r"[s][hz]\d{6}", href)[0])
        except:
            continue
 
def getStockInfo(lst, stockURL, fpath):
    count = 0
    for stock in lst:
        url = stockURL + stock + ".html"
        html = getHTMLText(url)
        try:
            if html=="":
                continue
            infoDict = {}
            soup = BeautifulSoup(html, 'html.parser')
            stockInfo = soup.find('div',attrs={'class':'stock-bets'})
 
            name = stockInfo.find_all(attrs={'class':'bets-name'})[0]
            infoDict.update({'股票名稱': name.text.split()[0]})
             
            keyList = stockInfo.find_all('dt')
            valueList = stockInfo.find_all('dd')
            for i in range(len(keyList)):
                key = keyList[i].text
                val = valueList[i].text
                infoDict[key] = val
             
            with open(fpath, 'a', encoding='utf-8') as f:
                f.write( str(infoDict) + '\n' )
                count = count + 1
                print("\r當(dāng)前進(jìn)度: {:.2f}%".format(count*100/len(lst)),end="")
        except:
            count = count + 1
            print("\r當(dāng)前進(jìn)度: {:.2f}%".format(count*100/len(lst)),end="")
            continue
 
def main():
    stock_list_url = 'http://quote.eastmoney.com/stocklist.html'
    stock_info_url = 'https://gupiao.baidu.com/stock/'
    output_file = 'D:/BaiduStockInfo.txt'
    slist=[]
    getStockList(slist, stock_list_url)
    getStockInfo(slist, stock_info_url, output_file)
 
main()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市砚亭,隨后出現(xiàn)的幾起案子育八,更是在濱河造成了極大的恐慌寓免,老刑警劉巖既峡,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乡翅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)材义,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嫁赏,“玉大人其掂,你說(shuō)我怎么就攤上這事×视” “怎么了款熬?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)攘乒。 經(jīng)常有香客問(wèn)我贤牛,道長(zhǎng),這世上最難降的妖魔是什么则酝? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任殉簸,我火速辦了婚禮,結(jié)果婚禮上沽讹,老公的妹妹穿的比我還像新娘喂链。我一直安慰自己,他們只是感情好妥泉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布椭微。 她就那樣靜靜地躺著,像睡著了一般盲链。 火紅的嫁衣襯著肌膚如雪蝇率。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天刽沾,我揣著相機(jī)與錄音本慕,去河邊找鬼。 笑死侧漓,一個(gè)胖子當(dāng)著我的面吹牛锅尘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播布蔗,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼藤违,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了纵揍?” 一聲冷哼從身側(cè)響起顿乒,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泽谨,沒(méi)想到半個(gè)月后璧榄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體特漩,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年骨杂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涂身。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搓蚪,死狀恐怖访得,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情陕凹,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布鳄炉,位于F島的核電站杜耙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拂盯。R本人自食惡果不足惜佑女,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谈竿。 院中可真熱鬧团驱,春花似錦、人聲如沸空凸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)呀洲。三九已至紊选,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間道逗,已是汗流浹背兵罢。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滓窍,地道東北人卖词。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吏夯,于是被迫代替她去往敵國(guó)和親此蜈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理噪生,服務(wù)發(fā)現(xiàn)舶替,斷路器,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • re模塊手冊(cè) 本模塊提供了和Perl里的正則表達(dá)式類(lèi)似的功能杠园,不關(guān)是正則表達(dá)式本身還是被搜索的字符串顾瞪,都可以...
    喜歡吃栗子閱讀 4,003評(píng)論 0 13
  • 本文介紹了Python對(duì)于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例...
    Python程序媛閱讀 1,349評(píng)論 0 22
  • http://python.jobbole.com/85231/ 關(guān)于專(zhuān)業(yè)技能寫(xiě)完項(xiàng)目接著寫(xiě)寫(xiě)一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,575評(píng)論 1 118
  • 能經(jīng)常跑步的人,一定是注重身體健美及生活自律陈醒,同時(shí)又極富正能量惕橙。能堅(jiān)持365天風(fēng)雨無(wú)阻跑步的人,一定有著非同常人的...
    翁晶閱讀 985評(píng)論 0 3