1. 程式人生 > >Python爬蟲之三:抓取貓眼電影TOP100

Python爬蟲之三:抓取貓眼電影TOP100

今天我要利用request庫和正則表示式抓取貓眼電影Top100榜單。

執行平臺: Windows
Python版本: Python3.6
IDE: Sublime Text
其他工具: Chrome瀏覽器

1. 抓取單頁內容

瀏覽器開啟貓眼電影首頁,點選“榜單”,然後再點選”TOP100榜”,就能看到想要的了。

1貓眼電影榜單頁

接下來通過程式碼來獲取網頁的HTML程式碼。

# 如果電腦裡沒有安裝requests,使用:pip install requests 進行安裝
import requests
from requests.exceptions import RequestException

def
get_one_page(url):
''' 獲取網頁html內容並返回 ''' try: # 獲取網頁html內容 response = requests.get(url) # 通過狀態碼判斷是否獲取成功 if response.status_code == 200: return response.text return None except RequestException: return None def main(): url = 'http://maoyan.com/board/4'
html = get_one_page(url) print(html) if __name__ == '__main__': main()

執行結果如下:

2抓取內容截圖

2. 正則表示式提取有用資訊

在上圖中,已經標註出我們將要提取的內容,下面用程式碼實現:

import re

def parse_one_page(html):
    '''
    解析HTML程式碼,提取有用資訊並返回
    '''
    # 正則表示式進行解析
    pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name">'
+ '<a.*?>(.*?)</a>.*?"star">(.*?)</p>.*?releasetime">(.*?)</p>' + '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S) # 匹配所有符合條件的內容 items = re.findall(pattern, html) for item in items: 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] } # 修改main()函式 def main(): url = 'http://maoyan.com/board/4' html = get_one_page(url) for item in parse_one_page(html): print(item)

執行結果如下:

3獲取網頁資訊結果

3. 儲存資訊

獲取電影資訊之後,要儲存起來留用。要儲存的有文字資訊和電影封面。

import os

def write_to_file(content):
    '''
    將文字資訊寫入檔案
    '''
    with open('result.txt', 'a', encoding='utf-8') as f:
        f.write(json.dumps(content, ensure_ascii=False) + '\n')
        f.close()

def save_image_file(url, path):
    '''
    儲存電影封面
    '''
    ir = requests.get(url)
    if ir.status_code == 200:
        with open(path, 'wb') as f:
            f.write(ir.content)
            f.close()

# 修改main()函式
def main():
    url = 'http://maoyan.com/board/4'
    html = get_one_page(url)
    # 封面資料夾不存在則建立
    if not os.path.exists('covers'):
        os.mkdir('covers')

    for item in parse_one_page(html):
        print(item)
        write_to_file(item)
        save_image_file(item['image'], 'covers/' + '%03d'%int(item['index']) + item['title'] + '.jpg')

下面為儲存結果:

4文字儲存結果

5封面儲存結果

4.下載TOP100所有電影資訊

通過點選標籤頁發現只是URL變化了:

6不同頁面點選效果

修改main函式以動態改變URL:

def main(offset):
    url = 'http://maoyan.com/board/4?offset=' + str(offset)
    html = get_one_page(url)
    # 封面資料夾不存在則建立
    if not os.path.exists('covers'):
        os.mkdir('covers')

    for item in parse_one_page(html):
        print(item)
        write_to_file(item)
        save_image_file(item['image'], 'covers/' + '%03d'%int(item['index']) + item['title'] + '.jpg')

if __name__ == '__main__':
    for i in rang(10):
        main(i * 10)

到此我們已經將TOP100的電影資訊和封面全部得到了。

5.多執行緒抓取

此次抓取的資料不算多,但是為了學習,使用多程序進行抓取,以應對以後大量的資料抓取。

from multiprocessing import Pool

if __name__ == '__main__':
    pool = Pool()
    pool.map(main, [i*10 for i in range(10)])

下面為普通抓取和多程序抓取的時間對比:

7多程序速度對比

以下為完整程式碼:

#-*- coding: utf-8 -*-
import re
import os
import json
import requests
from multiprocessing import Pool
from requests.exceptions import RequestException

def get_one_page(url):
    '''
    獲取網頁html內容並返回
    '''
    try:
        # 獲取網頁html內容
        response = requests.get(url)
        # 通過狀態碼判斷是否獲取成功
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None

def parse_one_page(html):
    '''
    解析HTML程式碼,提取有用資訊並返回
    '''
    # 正則表示式進行解析
    pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name">'
        + '<a.*?>(.*?)</a>.*?"star">(.*?)</p>.*?releasetime">(.*?)</p>'
        + '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)
    # 匹配所有符合條件的內容
    items = re.findall(pattern, html)

    for item in items:
        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]
        }

def write_to_file(content):
    '''
    將文字資訊寫入檔案
    '''
    with open('result.txt', 'a', encoding='utf-8') as f:
        f.write(json.dumps(content, ensure_ascii=False) + '\n')
        f.close()

def save_image_file(url, path):
    '''
    儲存電影封面
    '''
    ir = requests.get(url)
    if ir.status_code == 200:
        with open(path, 'wb') as f:
            f.write(ir.content)
            f.close()

def main(offset):
    url = 'http://maoyan.com/board/4?offset=' + str(offset)
    html = get_one_page(url)
    # 封面資料夾不存在則建立
    if not os.path.exists('covers'):
        os.mkdir('covers')

    for item in parse_one_page(html):
        print(item)
        write_to_file(item)
        save_image_file(item['image'], 'covers/' + '%03d'%int(item['index']) + item['title'] + '.jpg')

if __name__ == '__main__':
    # 使用多程序提高效率
    pool = Pool()
    pool.map(main, [i*10 for i in range(10)])

歡迎關注公眾賬號:

微信公眾號

相關推薦

Python爬蟲貓眼電影TOP100

今天我要利用request庫和正則表示式抓取貓眼電影Top100榜單。 執行平臺: Windows Python版本: Python3.6 IDE: Sublime Text 其他工具: Chrome瀏覽器 1. 抓取單頁內容 瀏

Python爬蟲智聯招聘基礎版

對於每個上班族來說,總要經歷幾次換工作,如何在網上挑到心儀的工作?如何提前為心儀工作的面試做準備?今天我們來抓取智聯招聘的招聘資訊,助你換工作成功! 執行平臺: Windows Python版本: Python3.6 IDE: Sublime Te

Python爬蟲之一貓眼電影TOP100

執行平臺: Windows Python版本: Python3.6 IDE: Sublime Text 其他工具: Chrome瀏覽器1. 抓取單頁內容瀏覽器開啟貓眼電影首頁,點選“榜單”,然後再點選”TOP100榜”,就能看到想要的了。接下來通過程式碼來獲取網頁的HTML

Python爬蟲練習豆瓣電影分類排行榜

    目標網址url:    https://movie.douban.com/typerank?type_name=%E5%8A%A8%E4%BD%9C&type=5&interval_id=100:90&action=    使用谷歌瀏覽器的檢查

Python爬蟲requests+正則表示式貓眼電影top100以及瓜子二手網二手車資訊(四)

{'index': '1', 'image': 'http://p1.meituan.net/movie/[email protected]_220h_1e_1c', 'title': '霸王別姬', 'actor': '張國榮,張豐毅,鞏俐', 'time': '1993-01-01', 'sc

Python爬蟲貓眼電影TOP100

執行平臺:windowsPython版本:Python 3.7.0IDE:Sublime Text瀏覽器:Chrome瀏覽器思路:            1.檢視網頁原始碼            2.抓取單頁內容            3.正則表示式提取資訊         

Python爬蟲例項2貓眼電影——破解字型反爬

 字型反爬 字型反爬也就是自定義字型反爬,通過呼叫自定義的字型檔案來渲染網頁中的文字,而網頁中的文字不再是文字,而是相應的字型編碼,通過複製或者簡單的採集是無法採集到編碼後的文字內容的。 現在貌似不少網站都有采用這種反爬機制,我們通過貓眼的實際情況來解釋一下。   下圖的是貓眼網頁

Python爬蟲練習之一美團資料

{'poiId': 1653468, 'frontImg': 'http://p0.meituan.net/600.600/mogu/7f102559bd246c78d7f2d2ab066a12d0139144.jpg', 'title': '火宴山(大悅城店)', 'avgScore': 4.9, 'all

Python爬蟲——實戰蘇寧易購的商品價格(渲染引擎方法)

蘇寧易購的商品價格請求URL為 https://pas.suning.com/nspcsale_0_000000000152709847_000000000152709847_0000000000_10_010_0100101_20268_1000000_

爬蟲(七)貓眼電影top100

all for rip pattern 分享 爬取 values findall proc 一:分析網站 目標站和目標數據目標地址:http://maoyan.com/board/4?offset=20目標數據:目標地址頁面的電影列表,包括電影名,電影圖片,主演,上映日期以

爬蟲+詞雲豆瓣電影top100的導演制作圖雲

ray 爬取 open tex 下載頁面 down app zhong form 前段時間做了一個關於豆瓣電影的爬蟲,之後又寫了一個陳奕迅歌詞的詞雲制作,於是我想不如做一個關於豆瓣高分電影導演的詞雲試試,於是有了接下來這篇隨筆。 首先,我需要知道豆瓣top100電影詳情頁面

【3月24日】Requests+正則表示式貓眼電影Top100

本次實驗爬蟲任務工具較為簡單,主要是熟悉正則表示式的匹配: pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>

貓眼電影top100

一、目標運用requests+正則表示式爬取貓眼電影top100的電影圖片、名稱、時間、評分等資訊,提取站點的url為"http://maoyan.com/board/4",提取結果以文字的形式儲存下來。二、準備工作1. 安裝python 首先,下載Python3,這裡使用P

Python開發簡單爬蟲靜態網頁“豆瓣電影 Top 250”電影數據

模塊 歲月 python開發 IE 女人 bubuko status 公司 使用 目標:爬取豆瓣電影TOP250的所有電影名稱,網址為:https://movie.douban.com/top250 1)確定目標網站的請求頭: 打開目標網站,在網頁空白處點擊鼠標右鍵,

Python爬蟲鏈家已成交二手房資訊(58W資料)

環境:Windows7+python3.6+Pycharm2017 目標:抓取鏈家北京地區已成交二手房資訊(無需登入),如下圖,戶型、朝向、成交時間價格等,儲存到csv。最後一共抓取約58W資料,程式執行8h。 --------全部文章: 京東爬蟲 、鏈家爬蟲、美團爬蟲、

Python爬蟲利用BeautifulSoup爬豆瓣小說()——將小說信息寫入文件

設置 one 行為 blog 應該 += html uil rate 1 #-*-coding:utf-8-*- 2 import urllib2 3 from bs4 import BeautifulSoup 4 5 class dbxs: 6 7

Python爬蟲實戰Requests+正則表示式爬貓眼電影Top100

import requests from requests.exceptions import RequestException import re import json # from multiprocessing import Pool # 測試了下 這裡需要自己新增頭部 否則得不到網頁 hea

Python-爬蟲-基本庫(requests)使用-貓眼電影Too100榜

spa spi fire tools not agen ext get pytho 1 #抓取貓眼電影,https://maoyan.com/board/4 榜單電影列表 2 import requests 3 import re 4 from requests

python爬蟲貓眼電影(分數的處理和多執行緒)

爬取用的庫是requests和beautifulsoup,程式碼編寫不難,主要是個別的細節處理需要注意 1、電影得分的處理 右鍵審查元素,我們看到分數的整數部分和小數部分是分開的,在beautifulsoup中,我們可以用(.strings或者.stripped_stri

python網路爬蟲例項Requests+正則表示式爬貓眼電影TOP100

一、前言 最近在看崔慶才先生編寫的《Python3網路爬蟲開發實戰》這本書,學習了requests庫和正則表示式,爬取貓眼電影top100榜單是這本書的第一個例項,主要目的是要掌握requests庫和正則表示式在實際案例中的使用。 二、開發環境 執行平