亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Requests+正則表達(dá)式爬取貓眼電影

30e8336b8229 / 1379人閱讀

摘要:目標(biāo)通過正則表達(dá)式爬取貓眼電影電影的排名名字電影封面圖片主演上映時(shí)間貓眼評(píng)分,將爬取的內(nèi)容寫入文件中。為了加快爬取網(wǎng)頁的速度,可以開啟循環(huán)和多線程當(dāng)需要爬取的信息很大時(shí),這是一個(gè)不錯(cuò)的技巧。

目標(biāo)

通過Request+正則表達(dá)式爬取貓眼電影TOP100電影的排名、名字、電影封面圖片、主演、上映時(shí)間、貓眼評(píng)分,將爬取的內(nèi)容寫入文件中。

流程框架

進(jìn)入到貓眼電影TOP100的頁面,此時(shí)的URL為http://maoyan.com/board/4,點(diǎn)擊第2頁,會(huì)發(fā)現(xiàn)此時(shí)的URL為http://maoyan.com/board/4?offset=10,點(diǎn)擊第3頁,會(huì)發(fā)現(xiàn)URL變成了http://maoyan.com/board/4?offset=20,由此可以推斷出offset參數(shù)為偏移量,如果偏移量為n,則顯示電影序號(hào)就是n+1到n+10,每頁顯示10個(gè),所以,如果想獲取TOP100電影,只需要分開請(qǐng)求10次,而10次的offset參數(shù)分別設(shè)置為0、10、20......90即可,這樣獲取不同的頁面之后,再用正則表達(dá)式提取出相關(guān)信息,就可以得到TOP100的所有電影信息了。獲取信息后,可以將信息寫入txt文件,當(dāng)然可以存入數(shù)據(jù)庫(此處為了偷懶,就不存入數(shù)據(jù)庫了)。為了加快爬取網(wǎng)頁的速度,可以開啟循環(huán)和多線程(當(dāng)需要爬取的信息很大時(shí),這是一個(gè)不錯(cuò)的技巧)。

下圖展示了具體的流程框架:

(1)抓取單頁內(nèi)容
# 獲取單個(gè)頁面的HTML代碼
def get_one_page(url):
    try:
        # 此處如果不加headers進(jìn)行偽裝,將會(huì)返回403錯(cuò)誤(拒絕訪問)
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
        }
        response = requests.get(url, headers = headers)
        # 如果返回的狀態(tài)碼是200,表示請(qǐng)求正常,返回頁面HTML代碼
        # 否則,返回None
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None

接下來測(cè)試一下是否可以獲取頁面內(nèi)容:

if __name__ == "__main__":
    url = "http://maoyan.com/board/4"
    html = get_one_page(url)
    print(html)
(2)正則表達(dá)式分析

可以對(duì)get_one_page(url)函數(shù)爬取的HTML代碼進(jìn)行分析(此處為了方便觀看,直接在瀏覽器控制臺(tái)分析),利用正則表達(dá)式獲取到有用的信息(電影的排名、名字、電影封面圖片、主演、上映時(shí)間、貓眼評(píng)分)。

# 解析單個(gè)頁面的HTML代碼,利用re模塊提取出有效信息
def parse_one_page(html):
    # re.S:表示“.”的作用擴(kuò)展到整個(gè)字符串,包括“
”
    pattern = re.compile("
.*?board-index.*?>(d+).*?data-src="(.*?)".*?name">(.*?).*?star">(.*?)

.*?releasetime">(.*?)

.*?integer">" +"(.*?).*?fraction">(.*?).*?
", re.S) items = re.findall(pattern, html) for item in items: # 構(gòu)造生成器函數(shù) yield{ "index": item[0], "image": item[1], "title": item[2], "actor": item[3].strip()[3:], "time": item[4].strip()[5:], "score": item[5]+item[6] }

接下來測(cè)試一下是否可以得到我們想要的內(nèi)容:

if __name__ == "__main__":
    url = "http://maoyan.com/board/4"
    html = get_one_page(url)
    items = parse_one_page(html)
    for item in items:
        print(item)

控制臺(tái)輸出如下:

單個(gè)頁面信息解析正確,那么,想要獲得多個(gè)頁面的信息,只需寫一個(gè)循環(huán)遍歷即可:

def main(offset):
    url = "http://maoyan.com/board/4?offset=" + str(offset)
    html = get_one_page(url)
    for item in parse_one_page(html):
        print(item)

if __name__ == "__main__":
    for i in range(10):
        main(i*10)
(3)保存至文件

只需寫一個(gè)簡(jiǎn)單的函數(shù)即可完成,但此處需要注意一點(diǎn),為保證輸出文件為中文,在讀寫文件時(shí)要添加參數(shù)endcoding="utf-8"

# 將解析出的內(nèi)容寫入文件
def write_to_file(content):
    # 添加endcoding="utf-8"確保輸出到文件中為中文
    with open("result.txt", "a", encoding="utf-8 ") as f:
        # 此處建議將解析出的內(nèi)容編碼為json格式再寫入文件,json的好處在此不過多敘述
        # 如果使用了json進(jìn)行編碼,務(wù)必添加參數(shù)ensure_ascii=False確保編碼數(shù)據(jù)為中文
        # json.dumps():編碼json數(shù)據(jù)
        f.write(json.dumps(content, ensure_ascii=False) + "
")
        f.close()

運(yùn)行代碼,目標(biāo)信息被寫入result.txt文件中:

(4)開啟循環(huán)及多線程

為了加快頁面爬取速度,可以使用多線程(針對(duì)大量數(shù)據(jù)時(shí)非常有效)。

if __name__ == "__main__":
    pool = Pool()
    pool.map(main, [i*10 for i in range(10)])
項(xiàng)目完整代碼已托管到github:https://github.com/panjings/p...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/42751.html

相關(guān)文章

  • python正則達(dá)式簡(jiǎn)單爬蟲入門+案例(爬取貓眼電影TOP榜)

    摘要:用迭代進(jìn)行異步操作保存寫入文件配置啟動(dòng)函數(shù)使用多進(jìn)程加速一秒完成 用正則表達(dá)式實(shí)現(xiàn)一個(gè)簡(jiǎn)單的小爬蟲 常用方法介紹 1、導(dǎo)入工具包 import requests #導(dǎo)入請(qǐng)求模塊 from flask import json #導(dǎo)入json模塊 from requests.exceptions import RequestException #異常捕捉模塊 import re #導(dǎo)入正則...

    xiaowugui666 評(píng)論0 收藏0
  • requests+正則達(dá)式+multiprocessing多線程抓取貓眼電影TOP100

    摘要:本文介紹利用庫庫和正則表達(dá)式爬取貓眼電影電影的相關(guān)信息,提取出電影名稱上映時(shí)間評(píng)分封面圖片等信息,將爬取的內(nèi)容寫入到文件中。獲取到不同的網(wǎng)頁后使用正則表達(dá)式提取出我們要的信息,就可以得到電影信息了,可以使用多線程加速爬取。 本文介紹利用Requests庫、multiprocessing庫和正則表達(dá)式爬取貓眼電影TOP100電影的相關(guān)信息,提取出電影名稱、上映時(shí)間、評(píng)分、封面圖片等信息,...

    jifei 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---27、Requests正則達(dá)式抓取貓眼電影排行

    摘要:所以我們?nèi)绻氆@取電影,只需要分開請(qǐng)求次,而次的參數(shù)設(shè)置為,,,,即可,這樣我們獲取不同的頁面結(jié)果之后再用正則表達(dá)式提取出相關(guān)信息就可以得到的所有電影信息了。上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)正則表達(dá)式下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)解析庫的使用 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---26、正則表達(dá)式下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---28、解析庫的使用:XPath 本節(jié)我們利用 Reque...

    SwordFly 評(píng)論0 收藏0
  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評(píng)論0 收藏0
  • 實(shí)戰(zhàn)!《長(zhǎng)津湖》為什么這么火爆?我用 Python 來分析貓眼影評(píng)

    摘要:作者周蘿卜鏈接長(zhǎng)津湖貓眼影評(píng)歡迎關(guān)注,專注數(shù)據(jù)分析數(shù)據(jù)挖掘好玩工具對(duì)于這個(gè)十一黃金周的電影市場(chǎng),絕對(duì)是長(zhǎng)津湖的天下,短短幾天,票房就已經(jīng)突破億,大有奮起直追戰(zhàn)狼的盡頭。 ...

    lijy91 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<