Python爬蟲之三:抓取貓眼電影TOP100
今天我要利用request庫和正則表示式抓取貓眼電影Top100榜單。
執行平臺: Windows
Python版本: Python3.6
IDE: Sublime Text
其他工具: Chrome瀏覽器
1. 抓取單頁內容
瀏覽器開啟貓眼電影首頁,點選“榜單”,然後再點選”TOP100榜”,就能看到想要的了。
接下來通過程式碼來獲取網頁的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. 正則表示式提取有用資訊
在上圖中,已經標註出我們將要提取的內容,下面用程式碼實現:
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. 儲存資訊
獲取電影資訊之後,要儲存起來留用。要儲存的有文字資訊和電影封面。
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.下載TOP100所有電影資訊
通過點選標籤頁發現只是URL變化了:
修改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)])
下面為普通抓取和多程序抓取的時間對比:
以下為完整程式碼:
#-*- 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庫和正則表示式在實際案例中的使用。 二、開發環境 執行平