python筆記--爬取豆瓣電影數(shù)據(jù)

1.找到目標網(wǎng)站

爬取豆瓣排名前250的電影莺治,打開https://movie.douban.com/top250

豆瓣的數(shù)據(jù)都在HTML中

2.分析url是如何變化的并提取有用的url

進入第二頁可見地址欄第二頁的url:https://movie.douban.com/top250?start=25&filter=

以此類推院领,

第三頁:https://movie.douban.com/top250?start=50&filter=

第四頁:https://movie.douban.com/top250?start=75&filter=

......

第十頁:https://movie.douban.com/top250?start=225&filter=

由此推測,第一頁的url是https://movie.douban.com/top250?start=0&filter=

3.使用python模擬瀏覽器向瀏覽器發(fā)送請求

用到的模塊:requests。模塊使用之前要先導入(import requests)

模塊安裝見http://www.reibang.com/p/d4262c8d8af8

進入第一頁蔗喂,按F12進入開發(fā)者模式,network--all--top250?start=0&filter=--headers,獲取url桶唐,和requests方法。

代碼:

# 請求url

url =?https://movie.douban.com/top250?start=0&filter=

# 請求方式為get茉兰,所以用requests.get尤泽,請求url獲得響應

response = requests.get(url)

# 響應狀態(tài)碼測試請求url獲得響應是否成功,結(jié)果為200规脸,則成功坯约,結(jié)果為418則表示被發(fā)現(xiàn)是爬蟲,網(wǎng)站進行了反爬

print(response.status_code)

結(jié)果為418莫鸭,可通過請求頭來偽裝成瀏覽器發(fā)出請求

代碼:

import requests

# 請求url

url =?https://movie.douban.com/top250?start=0&filter=

# 請求頭闹丐,鍵值對形式,加上引號

headers = {

'User-Agent':

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'

}

# 請求方式為get被因,所以用requests.get卿拴,請求url獲得響應,添加請求頭偽裝成瀏覽器

response = requests.get(url, headers=headers)

用print(resp.request.headers)可測試請求頭

4.for 循環(huán)獲取10頁數(shù)據(jù)

根據(jù)每頁url的變化規(guī)律梨与,start=(頁數(shù)-1)*25

要獲取10頁數(shù)據(jù)巍棱,編寫循環(huán)

代碼:

import requests

headers = {

'User-Agent':

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'

}

for i in range(10):

? ? ?url = 'https://movie.douban.com/top250?start='+str(i*25)+'&filter='

? ? ?response = requests.get(url, headers=headers)

5.提取有用數(shù)據(jù),用網(wǎng)頁解析器beautifulsoup

如何安裝beautifulsoup見http://www.reibang.com/p/d4262c8d8af8

使用之前先導入from bs4 import BeautifulSoup

代碼:

import requests

from bs4 import BeautifulSoup

headers = {

'User-Agent':

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'

}

for i in range(10):

? ? ?url = 'https://movie.douban.com/top250?start='+str(i*25)+'&filter='

? ? ?response = requests.get(url, headers=headers)

? ? ?# 第一個參數(shù)是要解析的內(nèi)容蛋欣,第二個參數(shù)是解析器

? ? ?bs = BeautifulSoup(response?.text, 'html.parser')

6.尋找有用數(shù)據(jù)

li可能有很多航徙,找它的父元素ol,ol可能有很多陷虎,找它的class到踏。

因此,先找類樣式為grid_view的ol尚猿,再找ol中的所有l(wèi)i

beautifulsoup的語法:對象名.find(標簽, 屬性)窝稿,對象名.find_all(標簽, 屬性)

代碼:

import requests

from bs4 import BeautifulSoup

headers = {

'User-Agent':

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'

}

for i in range(10):

? ? ?url = 'https://movie.douban.com/top250?start='+str(i*25)+'&filter='

? ? ?response = requests.get(url, headers=headers)

? ? ?bs = BeautifulSoup(response?.text, 'html.parser')

? ? ?#?找類樣式為grid_view的ol

? ? ?grid_view = bs.find('ol', class_='grid_view')

? ? ?# 找ol中的所有l(wèi)i

? ? ?all_li = grid_view.find_all('li')

7.for循環(huán)遍歷li獲取所需數(shù)據(jù):序號,標題凿掂,評分伴榔,推薦語,電影url

找到信息所在標簽和屬性值庄萎,寫代碼

代碼:

import requests

from bs4 import BeautifulSoup

headers = {

'User-Agent':

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'

}

for i in range(10):

? ? ?url = 'https://movie.douban.com/top250?start='+str(i*25)+'&filter='

? ? ?response = requests.get(url, headers=headers)

? ? ?bs = BeautifulSoup(response?.text, 'html.parser')

? ? ?grid_view = bs.find('ol', class_='grid_view')

? ? ?all_li = grid_view.find_all('li')

? ? ?for item in all_li:

? ? ? ? ? # 獲取序號

? ? ? ? ? no = item.find('em').text

? ? ? ? ? # 獲取標題

? ? ? ? ? title = item.find('span', class_='title').text

? ? ? ? ? #獲取推薦語

? ? ? ? ? inq = item.find('span', class_='inq').text

? ? ? ? ? # 獲取評分

? ? ? ? ? rat = item.find('span', class_='rating_num').text

? ? ? ? ? # 獲取電影url

? ? ? ? ? url_films = item.find('a')['href']

8.存儲數(shù)據(jù)

存儲方式有json踪少,CSV,excel糠涛,mysql援奢,mongdb,redis

本章將數(shù)據(jù)存儲到Excel

為存儲數(shù)據(jù)先定義一個變量lst用于存儲數(shù)據(jù)忍捡,再將數(shù)據(jù)存儲Excel中集漾,要用到openpyxl切黔,安裝方式見http://www.reibang.com/p/d4262c8d8af8

代碼:

import requests

from bs4 import BeautifulSoup

import openpyxl

headers = {

'User-Agent':

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'

}

# 定義變量lst,Excel第一行數(shù)據(jù)為'編號', '名稱', '推薦語', '評分', '鏈接地址'

lst=[['編號', '名稱', '推薦語', '評分', '鏈接地址']]

for i in range(10):

? ? ?url = 'https://movie.douban.com/top250?start='+str(i*25)+'&filter='

? ? ?response = requests.get(url, headers=headers)

? ? ?bs = BeautifulSoup(response?.text, 'html.parser')

? ? ?grid_view = bs.find('ol', class_='grid_view')

? ? ?all_li = grid_view.find_all('li')

? ? ?for item in all_li:

? ? ? ? ? no = item.find('em').text

? ? ? ? ? title = item.find('span', class_='title').text

? ? ? ? ? inq = item.find('span', class_='inq').text

? ? ? ? ? rat = item.find('span', class_='rating_num').text

? ? ? ? ? url_films = item.find('a')['href']

? ? ? ? ? # 將數(shù)據(jù)添加到列表中

? ? ? ? ? lst.append([no, title, inq, rat, url_films])

# 先創(chuàng)建一個工作簿xlsx

wb = openpyxl.Workbook()

# 創(chuàng)建工作表sheet

sheet = wb.active

sheet.title = '我的電影'

# 遍歷列表中的數(shù)據(jù)具篇,將數(shù)據(jù)添加到工作表中

for item in lst:

? ? ?sheet.append(item)

# 保存

wb.save('films.xlsx')

9.運行后發(fā)現(xiàn)報錯:attributeerror:‘nonetype’ object has no attribute ‘text’

原因:有部分電影沒有推薦語

修改:添加判斷語句

代碼:

import requests

from bs4 import BeautifulSoup

import openpyxl

headers = {

'User-Agent':

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'

}

lst=[['編號', '名稱', '推薦語', '評分', '鏈接地址']]

for i in range(10):

? ? ?url = 'https://movie.douban.com/top250?start='+str(i*25)+'&filter='

? ? ?response = requests.get(url, headers=headers)

? ? ?bs = BeautifulSoup(response?.text, 'html.parser')

? ? ?grid_view = bs.find('ol', class_='grid_view')

? ? ?all_li = grid_view.find_all('li')

? ? ?for item in all_li:

? ? ? ? ? no = item.find('em').text

? ? ? ? ? title = item.find('span', class_='title').text

? ? ? ? ?#刪去.text

? ? ? ? ? inq = item.find('span', class_='inq')

? ? ? ? ? rat = item.find('span', class_='rating_num').text

? ? ? ? ? url_films = item.find('a')['href']

? ? ? ? ?# 添加判斷語句,判斷結(jié)果為true纬霞,賦值inq,否則為空

? ? ? ? ? lst.append([no, title, inq.text if inq!=None else' ', rat, url_films])

wb = openpyxl.Workbook()

sheet = wb.active

sheet.title = '我的電影'

for item in lst:

? ? ?sheet.append(item)

wb.save('films.xlsx')

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驱显,一起剝皮案震驚了整個濱河市险领,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秒紧,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挨下,死亡現(xiàn)場離奇詭異熔恢,居然都是意外死亡,警方通過查閱死者的電腦和手機臭笆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門叙淌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人愁铺,你說我怎么就攤上這事鹰霍。” “怎么了茵乱?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵茂洒,是天一觀的道長。 經(jīng)常有香客問我瓶竭,道長督勺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任斤贰,我火速辦了婚禮智哀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荧恍。我一直安慰自己瓷叫,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布送巡。 她就那樣靜靜地躺著摹菠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骗爆。 梳的紋絲不亂的頭發(fā)上辨嗽,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音淮腾,去河邊找鬼糟需。 笑死屉佳,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的洲押。 我是一名探鬼主播武花,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼杈帐!你這毒婦竟也來了体箕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤挑童,失蹤者是張志新(化名)和其女友劉穎累铅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體站叼,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡娃兽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了尽楔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片投储。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖阔馋,靈堂內(nèi)的尸體忽然破棺而出玛荞,到底是詐尸還是另有隱情,我是刑警寧澤呕寝,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布勋眯,位于F島的核電站,受9級特大地震影響下梢,放射性物質(zhì)發(fā)生泄漏凡恍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一怔球、第九天 我趴在偏房一處隱蔽的房頂上張望嚼酝。 院中可真熱鬧,春花似錦竟坛、人聲如沸闽巩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涎跨。三九已至,卻和暖如春崭歧,著一層夾襖步出監(jiān)牢的瞬間隅很,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工率碾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留叔营,地道東北人屋彪。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像绒尊,于是被迫代替她去往敵國和親畜挥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容