一個(gè)簡(jiǎn)單的python爬蟲程序 爬取豆瓣熱度Top100以內(nèi)的電影信息
概述
這是一個(gè)簡(jiǎn)單的python爬蟲程序,僅用作技術(shù)學(xué)習(xí)與交流,主要是通過一個(gè)簡(jiǎn)單的實(shí)際案例來對(duì)網(wǎng)絡(luò)爬蟲有個(gè)基礎(chǔ)的認(rèn)識(shí)。
什么是網(wǎng)絡(luò)爬蟲
簡(jiǎn)單的講,網(wǎng)絡(luò)爬蟲就是模擬人訪問web站點(diǎn)的行為來獲取有價(jià)值的數(shù)據(jù)。專業(yè)的解釋:百度百科
分析爬蟲需求
確定目標(biāo)
爬取豆瓣熱度在Top100以內(nèi)的電影的一些信息,包括電影的名稱、豆瓣評(píng)分、導(dǎo)演、編劇、主演、類型、制片國(guó)家/地區(qū)、語言、上映日期、片長(zhǎng)、IMDb鏈接等信息。
分析目標(biāo)
1.借助工具分析目標(biāo)網(wǎng)頁
首先,我們打開豆瓣電影·熱門電影,會(huì)發(fā)現(xiàn)頁面總共20部電影,但當(dāng)查看頁面源代碼當(dāng)時(shí)候,在源代碼中根本找不到這些電影當(dāng)信息。這是為什么呢?原來豆瓣在這里是通過ajax技術(shù)獲取電影信息,再動(dòng)態(tài)的將數(shù)據(jù)加載到頁面中的。這就需要借助Chrome的開發(fā)者工具,先找到獲取電影信息的API。
然后對(duì)電影詳情頁進(jìn)行分析
思路分析
具體實(shí)現(xiàn)
開發(fā)環(huán)境
python3.6
pycharm
主要依賴庫
urllib -- 基礎(chǔ)性的網(wǎng)絡(luò)相關(guān)操作
lxml -- 通過xpath語法解析HTML頁面
json -- 對(duì)通過API獲取的JSON數(shù)據(jù)進(jìn)行操作
re -- 正則操作
代碼實(shí)現(xiàn)
from urllib import request from lxml import etree import json import re import ssl # 全局取消證書驗(yàn)證 ssl._create_default_https_context = ssl._create_unverified_context def get_headers(): """ 返回請(qǐng)求頭信息 :return: """ headers = { 'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) " "AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/65.0.3325.181 Safari/537.36" } return headers def get_url_content(url): """ 獲取指定url的請(qǐng)求內(nèi)容 :param url: :return: """ content = '' headers = get_headers() res = request.Request(url, headers=headers) try: resp = request.urlopen(res, timeout=10) content = resp.read().decode('utf-8') except Exception as e: print('exception: %s' % e) return content def parse_content(content): """ 解析網(wǎng)頁 :param content: :return: """ movie = {} html = etree.HTML(content) try: info = html.xpath("http://div[@id='info']")[0] movie['director'] = info.xpath("./span[1]/span[2]/a/text()")[0] movie['screenwriter'] = info.xpath("./span[2]/span[2]/a/text()")[0] movie['actors'] = '/'.join(info.xpath("./span[3]/span[2]/a/text()")) movie['type'] = '/'.join(info.xpath("./span[@property='v:genre']/" "text()")) movie['initialReleaseDate'] = '/'.\ join(info.xpath(".//span[@property='v:initialReleaseDate']/text()")) movie['runtime'] = \ info.xpath(".//span[@property='v:runtime']/text()")[0] def str_strip(s): return s.strip() def re_parse(key, regex): ret = re.search(regex, content) movie[key] = str_strip(ret[1]) if ret else '' re_parse('region', r'<span class="pl">制片國(guó)家/地區(qū):</span>(.*?)<br/>') re_parse('language', r'<span class="pl">語言:</span>(.*?)<br/>') re_parse('imdb', r'<span class="pl">IMDb鏈接:</span> <a href="(.*?)" rel="external nofollow" ' r'target="_blank" >') except Exception as e: print('解析異常: %s' % e) return movie def spider(): """ 爬取豆瓣前100部熱門電影 :return: """ recommend_moives = [] movie_api = 'https://movie.douban.com/j/search_subjects?' \ 'type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend' \ '&page_limit=100&page_start=0' content = get_url_content(movie_api) json_dict = json.loads(content) subjects = json_dict['subjects'] for subject in subjects: content = get_url_content(subject['url']) movie = parse_content(content) movie['title'] = subject['title'] movie['rate'] = subject['rate'] recommend_moives.append(movie) print(len(recommend_moives)) print(recommend_moives) if __name__ == '__main__': spider()
效果
總結(jié)
本文較詳細(xì)的闡述了一個(gè)爬蟲從需求->分析->實(shí)現(xiàn)的過程,并給出了具體的代碼實(shí)現(xiàn)。通過對(duì)本文的學(xué)習(xí),我們可以了解到網(wǎng)絡(luò)爬蟲的一些基本的知識(shí),以及python的一些基本庫的使用方法。接下來我會(huì)使用一些高級(jí)些的網(wǎng)絡(luò)操作相關(guān)的庫以及對(duì)抓取到的數(shù)據(jù)做個(gè)存儲(chǔ)的方式,來更深層次的理解python網(wǎng)絡(luò)爬蟲。
特別聲明
1. 本文涉及到的豆瓣網(wǎng)是國(guó)內(nèi)知名網(wǎng)站,若有侵權(quán)之處,請(qǐng)告知。
2. 本文屬作者原創(chuàng),轉(zhuǎn)載請(qǐng)標(biāo)明出處;未經(jīng)允許,不得用于商業(yè)用途。
3. 本文只是用作網(wǎng)絡(luò)爬蟲技術(shù)學(xué)習(xí)交流,讀者涉及到的任何侵權(quán)問題,與本文作者無關(guān)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python爬蟲入門教程01之爬取豆瓣Top電影
- Python爬蟲獲取豆瓣電影并寫入excel
- Python爬蟲實(shí)現(xiàn)的根據(jù)分類爬取豆瓣電影信息功能示例
- python爬蟲豆瓣網(wǎng)的模擬登錄實(shí)現(xiàn)
- Python爬蟲——爬取豆瓣電影Top250代碼實(shí)例
- Python爬蟲實(shí)戰(zhàn):分析《戰(zhàn)狼2》豆瓣影評(píng)
- Python制作豆瓣圖片的爬蟲
- 實(shí)踐Python的爬蟲框架Scrapy來抓取豆瓣電影TOP250
- 編寫Python爬蟲抓取豆瓣電影TOP100及用戶頭像的方法
- python 開心網(wǎng)和豆瓣日記爬取的小爬蟲
相關(guān)文章
Python+MongoDB自增鍵值的簡(jiǎn)單實(shí)現(xiàn)
下面小編就為大家?guī)硪黄狿ython+MongoDB自增鍵值的簡(jiǎn)單實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11Python函數(shù)關(guān)鍵字參數(shù)及用法詳解
本文主要介紹了Python函數(shù)關(guān)鍵字參數(shù)及用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Django項(xiàng)目創(chuàng)建到啟動(dòng)詳解(最全最詳細(xì))
這篇文章主要給大家介紹了關(guān)于Django項(xiàng)目創(chuàng)建到啟動(dòng)的步驟,本文介紹的方法算是最全最詳細(xì)的一個(gè)項(xiàng)目,需要的朋友可以參考下2019-09-09selenium+python實(shí)現(xiàn)登陸QQ郵箱并發(fā)送郵件功能
這篇文章主要介紹了selenium+python實(shí)現(xiàn)登陸QQ郵箱并發(fā)送郵件功能,本文給大家分享完整實(shí)例代碼,需要的朋友可以參考下2019-12-12Python 字符串操作(string替換、刪除、截取、復(fù)制、連接、比較、查找、包含、大小寫轉(zhuǎn)換、分割等)
這篇文章主要介紹了Python 字符串操作(string替換、刪除、截取、復(fù)制、連接、比較、查找、包含、大小寫轉(zhuǎn)換、分割等),需要的朋友可以參考下2018-03-03python中json操作之json.loads、json.load、json.jumps及json.jump用法
最近在python里面用json讀取json文件,可是老是不成功,特此記錄一下,下面這篇文章主要給大家介紹了關(guān)于python中json操作之json.loads、json.load、json.jumps及json.jump用法的相關(guān)資料,需要的朋友可以參考下2022-08-08基于pandas數(shù)據(jù)清洗的實(shí)現(xiàn)示例
數(shù)據(jù)清洗是數(shù)據(jù)科學(xué)和數(shù)據(jù)分析中非常重要的一個(gè)步驟,本文主要介紹了基于pandas的數(shù)據(jù)清洗,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07selenium+python 對(duì)輸入框的輸入處理方法
今天小編就為大家分享一篇selenium+python 對(duì)輸入框的輸入處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10對(duì)Django 中request.get和request.post的區(qū)別詳解
今天小編就為大家分享一篇對(duì)Django 中request.get和request.post的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08