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

歡迎訪問 生活随笔!

生活随笔

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

python

python 豆瓣电影top250_「豆瓣电影top250」豆瓣电影TOP250抓取 - seo实验室

發布時間:2023/12/20 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 豆瓣电影top250_「豆瓣电影top250」豆瓣电影TOP250抓取 - seo实验室 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

豆瓣電影top250

全部代碼以及分析見GitHub:https://github.com/dta0502/douban-top250

本文是Python爬取豆瓣的top250電影的分析和實現,具體是將電影的標題、電影描述、電影的評分、電影的評論數以及電影的一句影評抓取下來,然后輸出csv文件。

第一步:打開豆瓣電影top250這個頁面。

第二步:分析網頁源代碼,找到我們需要爬取的信息的標簽,例如電影title的標簽等等是什么。

第三步:寫代碼了,將整個html請求下來,然后解析網頁,獲取我們需要的信息,利用lxml進行解析。

網頁分析

首先打開豆瓣電影top250,我們可以看到電影是按照一個列表呈現出來的,頁面是通過最底部的12345…來進行翻頁查看的。

定位頁面元素

我通過chrome的開發者工具來分析頁面元素。下面是chrome的檢查的頁面:

點擊上圖中畫圓圈的圖標,然后自己鼠標在頁面上選中一部分,就會直接定位到具體的地方了。

電影信息的位置

通過上面所說的方法,我們可以觀察得到所有列表是放在一個class = ‘grid_view’的ol標簽中的,這個標簽下的每一個li標簽就是每一部電影信息的Item。

ol標簽的XPath路徑

//*[@id="content"]/p/p[1]/ol

電影標題的XPath路徑

//*[@id="content"]/p/p[1]/ol/li[1]/p/p[2]/p[1]/a/span[1]

電影的描述

//*[@id="content"]/p/p[1]/ol/li[1]/p/p[2]/p[2]/p[1]

電影評分的XPath路徑

//*[@id="content"]/p/p[1]/ol/li[1]/p/p[2]/p[2]/p/span[2]

電影評論數的XPath路徑

//*[@id="content"]/p/p[1]/ol/li[1]/p/p[2]/p[2]/p/span[4]

電影的一句經典影評

//*[@id="content"]/p/p[1]/ol/li[1]/p/p[2]/p[2]/p[2]/span

翻頁

每一頁網址的變化規律,一頁可以顯示25部電影,就是說這250部電影一共有10頁。觀察前幾頁的網址很容易發現規律:就是start后面跟的參數變化,等于(頁數-1)*25,而且發現后面的filter去掉也不影響。

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

https://movie.douban.com/top250?start=25

...

https://movie.douban.com/top250?start=225

現在完成了整個網頁的分析,下面開始實現爬取

Python實現爬取(baseline model)

導入第三方庫

requests模塊取代內建的urllib2模塊,因為其速度更快而且可讀性更好。

lxml

lxml是一個優美的擴展庫,用來快速解析XML以及HTML文檔即使所處理的標簽非常混亂。

import requests

from lxml import etree

import csv

requests獲取頁面

這里我們將使用 requests.get 來從頁面中取得我們的數據, 通過使用 html 模塊解析它,并將結果保存到 tree 中。

headers={

'User-Agent':'Mozilla/5.0 (windows NT 6.1; WOW64) APPleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}

data = requests.get(url,headers = headers).text

selector = etree.HTML(data)

etree現在包含了整個HTML文件到一個優雅的樹結構中,我們可以使用兩種方法訪問:

XPath:XPath是一種在結構化文檔(如HTML或XML)中定位信息的方式。

CSS選擇器。

下面我采用XPath方法來定位信息。

電影信息的XPath路徑獲取

Chrome可以右鍵元素,選擇‘Inspect element’,高亮這段代碼,再次右擊,并選擇‘Copy XPath’。

下面是根據XPath路徑獲取想要的電影信息,把它們保存到變量中。

film=selector.xpath('//*[@id="content"]/p/p[1]/ol/li')

for p in film:

title = p.xpath('p/p[2]/p[1]/a/span[1]/text()')[0]

describe = p.xpath('p/p[2]/p[2]/p[1]/text()') #這里我爬取了年份、國家、類型這三個參數,忽略了導演等參數

rating = p.xpath('p/p[2]/p[2]/p/span[2]/text()')[0]

comments_nums = p.xpath('p/p[2]/p[2]/p/span[4]/text()')[0]

comments = p.xpath('p/p[2]/p[2]/p[2]/span/text()')[0]

下面看下獲取到的電影信息:

>>> title

'怦然心動'

>>> describe[0]

'\n 導演: 羅伯·萊納 Rob Reiner\xa0\xa0\xa0主演: 瑪德琳·卡羅爾 Madeline Carroll / 卡...'

>>> describe[0].lstrip()

'導演: 羅伯·萊納 Rob Reiner\xa0\xa0\xa0主演: 瑪德琳·卡羅爾 Madeline Carroll / 卡...'

>>> describe[0].lstrip().split('\xa0\xa0\xa0')

['導演: 羅伯·萊納 Rob Reiner', '主演: 瑪德琳·卡羅爾 Madeline Carroll / 卡...']

>>> describe[1]

'\n 2010\xa0/\xa0美國\xa0/\xa0劇情 喜劇 愛情\n '

>>> describe[1].lstrip() #lstrip = left strip =去除(字符串)左邊的

'2010\xa0/\xa0美國\xa0/\xa0劇情 喜劇 愛情\n '

>>> describe[1].lstrip().rstrip() #rstrip = right strip =去除(字符串)右邊的

'2010\xa0/\xa0美國\xa0/\xa0劇情 喜劇 愛情'

>>> describe[1].lstrip().rstrip().split('\xa0/\xa0')

['2010', '美國', '劇情 喜劇 愛情']

>>> rating

'8.9'

>>> comments_nums

'691709人評價'

>>> comments_nums[:-3]

'691709'

>>> comments

'真正的幸福是來自內心深處。'

完整實現

import requests

from lxml import etree

import csv

top250_url = 'https://movie.douban.com/top250?start={}&filter='

movie_name = '名稱'

movie_year = '年份'

movie_country = '國家'

movie_type = '類型'

movie_director = '導演'

movie_assess = '評價人數'

movie_score = '評分'

movie_num = 0

with open('top250_movie.csv','w',newline = '',encoding = 'utf-8') as f:

writer = csv.writer(f)

writer.writerow([movie_num,movie_name,movie_year,movie_country,movie_type,movie_director,movie_assess,movie_score])

for lists in range(10):

movie_content = requests.get(top250_url.format(lists*25)).text

selector = etree.HTML(movie_content)

all_list = selector.xpath('//*[@id="content"]/p/p[1]/ol/li')

for item in all_list:

movie_name = item.xpath('p/p[2]/p[1]/a/span[1]/text()')[0]

movie_assess = item.xpath('p/p[2]/p[2]/p/span[4]/text()')[0][:-3]

movie_score = item.xpath('p/p[2]/p[2]/p/span[2]/text()')[0]

movie_num += 1

# 下面將電影的介紹信息進行整理

movie_intro = item.xpath('p/p[2]/p[2]/p[1]/text()')

movie_actor_infos = movie_intro[0].lstrip().split('\xa0\xa0\xa0')

movie_other_infos = movie_intro[1].lstrip().rstrip().split('\xa0/\xa0')

# 下面是導演信息

movie_director = movie_actor_infos[0][3:]

# 下面是電影上映的年份

movie_year = movie_other_infos[0]

# 下面是電影的國家

movie_country = movie_other_infos[1]

# 下面是電影的類型

movie_type = movie_other_infos[2]

writer.writerow([movie_num,movie_name,movie_year,movie_country,movie_type,movie_director,movie_assess,movie_score])

結果

import pandas as pd

import csv

df = pd.read_csv("top250_movie.csv",encoding = 'utf-8')

df

>>> df.info()

RangeIndex: 250 entries, 0 to 249

Data columns (total 8 columns):

0 250 non-null int64

名稱 250 non-null object

年份 250 non-null object

國家 250 non-null object

類型 250 non-null object

導演 250 non-null object

評價人數 250 non-null int64

評分 250 non-null float64

dtypes: float64(1), int64(2), object(5)

memory usage: 15.7+ KB

遇到的問題

csv文件產生空行的問題

excel打開csv出現亂碼怎么解決

參考

使用python抓取豆瓣top250電影數據進行分析

python爬蟲一:抓取豆瓣電影Top250

全部代碼以及分析見GitHub:https://github.com/dta0502/douban-top250

相關閱讀

《社交網絡》是一部改編自本·麥茲里奇的小說《意外的億萬富翁:Facebook的創立,一個關于性、金錢、天才和背叛的故事》,由大衛 · 芬

一直在忙項目,終于有時間重新來總結下css。

一組嵌套的盒子,子盒子和父盒子之間想設置上邊距,不能用margin-top設置。因為子盒子

博客呃,其實我是個菜如一只雞的家伙了,想了那么久說要去打Topcoder 的srm,從配置好到實際打,中間間隔估計超過1個月.當然第一次srm人

事實上stoppropagation和cancelBubble的作用是一樣的,都是用來阻止瀏覽器默認的事件冒泡行為。不同之處在于stoppropagation屬于W3

雯雅婷4 PoorSakura vol.4

作品內容 (RJ065602)【游戲名稱】:(過于H我就不說了,大家自己找一下)【サークル名 】:? 7thDream サ

總結

以上是生活随笔為你收集整理的python 豆瓣电影top250_「豆瓣电影top250」豆瓣电影TOP250抓取 - seo实验室的全部內容,希望文章能夠幫你解決所遇到的問題。

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