日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python进阶实战 1.0 :爬取豆瓣TOP250电影排行榜

發布時間:2023/12/18 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python进阶实战 1.0 :爬取豆瓣TOP250电影排行榜 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

爬取豆瓣TOP250電影排行榜


學習指南

本系列課程沒有必然的前后關系(除非特別強調)

因此,你可以選擇任意一個喜歡的案例開始學習!


項目需求

很多朋友在看一部電影前都喜歡先找一下網友們對該片的評價。

說到電影評分的網站,除了國外的 IMDB 和爛番茄,國內要數豆瓣最為出名。

主要原因是豆瓣有一套完整的評分和防水軍機制

在這套機制下,豆瓣評分高的電影不一定是所有人都喜歡的,但是豆瓣評分低的電影,一定是實打實的爛片!

雖然每個人的喜好偏愛不同,但通常豆瓣評分 8 分以上的電影,都是值得一看的。

豆瓣還專門提供了一個 TOP250 的電影鏈接 ->?https://movie.douban.com/top250

溫馨提示:別看這些片兒都“挺老”的,很多都是現在很難再超越的經典,建議豆瓣的 TOP250 都看一遍,相信你將會受益匪淺!

要求:編寫一個小爬蟲,將豆瓣 TOP250 的電影名、評分以及相關的資料保存到一個文件中。


開發思路

思路一:

在《零基礎入門學習Python》系列課程中,給大家講過使用 Python 開發爬蟲,那時候是利用 urllib 模塊實現網絡抓取功能。但現在請忘掉它,因為在 Python 中,有一個更好地替代者 —— Requests。

Requests 簡化了 urllib 的諸多冗雜且無意義的操作,并提供了更強大的功能。不是我吹,Requests 是 Python 所有模塊中最受歡迎的一個,全世界最優秀的程序員都在使用它!

有關 Requests 模塊的安裝及使用,請參考 ->?Requests 模塊中文文檔

使用 Requests 模塊的?get()?方法從服務器上下載一個頁面之后,就需要解析它。

思路二:

解析網頁內容小甲魚推薦使用 BeautifulSoup 模塊,它可以化腐朽為神奇,將一個復雜的網頁結構轉化為書籍目錄的形式供你瀏覽。

>>> import requests >>> import bs4 >>> res = requests.get("https://movie.douban.com/top250") >>> soup = bs4.BeautifulSoup(res.text, "html.parser") >>> targets = soup.find_all("div", class_="hd") >>> for each in targets:print(each.a.span.text)肖申克的救贖 霸王別姬 這個殺手不太冷 阿甘正傳 美麗人生 千與千尋 辛德勒的名單 泰坦尼克號 盜夢空間 機器人總動員 海上鋼琴師 三傻大鬧寶萊塢 忠犬八公的故事 放牛班的春天 大話西游之大圣娶親 教父 龍貓 楚門的世界 亂世佳人 天堂電影院 觸不可及 當幸福來敲門 熔爐 無間道 搏擊俱樂部

這些嘩啦啦的數據是怎么得來的呢?

我們先來看下 HTML 源代碼:

發現每個電影的標題都是位于?<div class="hd">...</div>?標簽中的,它的從屬關系是:div?->?a?->?span

所以我們先調用 find_all() 方法,找到所有?class="hd"?的?div?標簽,然后按照從屬關系即可直接取出電影名。

怎么樣?是不是和翻書查字典一樣簡單!

有關 BeautifulSoup 模塊的安裝及使用,請參考 -> BeautifulSoup4 模塊中文文檔


模塊檔案

  • Requests 模塊中文文檔(一)
  • Requests 模塊中文文檔(二)
  • Requests 模塊中文文檔(三)
  • Requests 模塊中文文檔(四)
  • Requests 模塊中文文檔(五)
  • Requests 模塊中文文檔(六)
  • BeautifulSoup4 模塊中文文檔

代碼清單

import requests import bs4 import redef open_url(url):# 使用代理# proxies = {"http": "127.0.0.1:1080", "https": "127.0.0.1:1080"}headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'}# res = requests.get(url, headers=headers, proxies=proxies)res = requests.get(url, headers=headers)return resdef find_movies(res):soup = bs4.BeautifulSoup(res.text, 'html.parser')# 電影名movies = []targets = soup.find_all("div", class_="hd")for each in targets:movies.append(each.a.span.text)# 評分ranks = []targets = soup.find_all("span", class_="rating_num")for each in targets:ranks.append(' 評分:%s ' % each.text)# 資料messages = []targets = soup.find_all("div", class_="bd")for each in targets:try:messages.append(each.p.text.split('\n')[1].strip() + each.p.text.split('\n')[2].strip())except:continueresult = []length = len(movies)for i in range(length):result.append(movies[i] + ranks[i] + messages[i] + '\n')return result# 找出一共有多少個頁面 def find_depth(res):soup = bs4.BeautifulSoup(res.text, 'html.parser')depth = soup.find('span', class_='next').previous_sibling.previous_sibling.textreturn int(depth)def main():host = "https://movie.douban.com/top250"res = open_url(host)depth = find_depth(res)result = []for i in range(depth):url = host + '/?start=' + str(25 * i)res = open_url(url)result.extend(find_movies(res))with open("豆瓣TOP250電影.txt", "w", encoding="utf-8") as f:for each in result:f.write(each)if __name__ == "__main__":main()

補充

盡管豆瓣設計了一套防止水軍刷分的機制,但仍然是有漏網之魚的。

于是有網友給出了一套非常直觀有效地判斷電影好壞的方法

通常只應天上有的神作,評分是呈現“F”形狀的,也就是 5 分和 4 分居多,1、2、3 分幾乎沒有。

比如觸及靈魂深處的越獄神作《肖申克的救贖》

又如勵志神作《阿甘正傳》

一般的好片(值得到電影院去支持的)評分是呈現“P”形狀的,也就是 3、4、5 分占主導,1 和 2 分較少。

比如《殺破狼2》,講真,張晉在里面主演的反派確實帥到掉渣

還有前期紅遍全國的《戰狼2》

普通爛片通常是呈現“b”的形狀,也就是 4、5 分比較少,1、2、3 分占據多數。

比如《小時代》(個人觀點,不喜勿噴)

有些雖然是爛片,但是剛上映時水軍(刷分)特別多的

或者是只有粉絲喜歡,一般人根本看不下去的

這類片的評分是呈現一個“C”的形狀……(個人觀點,不喜勿噴)

但隨著看的人越來越多,其終將呈現出爛片的特征(個人觀點,不喜勿噴)

最后還有一種終極爛片,就是本身就是爛片,然后沒有粉絲也沒錢請水軍的那種……

評分是呈現出“L”形的,比如前陣子為了評分的事兒還聲稱要豆瓣道歉賠償的《純潔心靈·逐夢演藝圈》(個人觀點,不喜勿噴)

光聽名字就是一陣酥麻?

?

總結

以上是生活随笔為你收集整理的Python进阶实战 1.0 :爬取豆瓣TOP250电影排行榜的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。