python使用代理IP爬取貓眼電影專(zhuān)業(yè)評(píng)分?jǐn)?shù)據(jù)
前言
我們?yōu)槭裁葱枰褂肐P代理服務(wù)?
在編寫(xiě)爬蟲(chóng)程序的過(guò)程中,IP封鎖無(wú)疑是一個(gè)常見(jiàn)且棘手的問(wèn)題。盡管網(wǎng)絡(luò)上存在大量的免費(fèi)IP代理網(wǎng)站,但其質(zhì)量往往參差不齊,令人堪憂(yōu)。許多代理IP的延遲過(guò)高,嚴(yán)重影響了爬蟲(chóng)的工作效率;更糟糕的是,其中不乏大量已經(jīng)失效的代理IP,使用這些IP不僅無(wú)法繞過(guò)封鎖,反而可能使爬蟲(chóng)陷入更深的困境。
本篇文章中介紹一下如何使用Python的Requests庫(kù)和BeautifulSoup庫(kù)來(lái)抓取貓眼電影網(wǎng)站上的專(zhuān)業(yè)評(píng)分?jǐn)?shù)據(jù)。
正文
1、導(dǎo)包
import requests from bs4 import BeautifulSoup import pandas as pd import matplotlib.pyplot as plt
Requests庫(kù)是一個(gè)簡(jiǎn)單易用的HTTP庫(kù),用于發(fā)送網(wǎng)絡(luò)請(qǐng)求和獲取響應(yīng)數(shù)據(jù)。BeautifulSoup庫(kù)則是一個(gè)用于解析HTML和XML文檔的Python庫(kù),可以幫助我們從網(wǎng)頁(yè)中提取所需的數(shù)據(jù)。
2、設(shè)置代理
設(shè)置代理和代理信息可以在這里獲?。?a rel="external nofollow" target="_blank">IP代理服務(wù)
# 設(shè)置代理信息
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "your_proxy_user"
proxyPass = "your_proxy_password"
# 設(shè)置代理
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
"host": proxyHost,
"port": proxyPort,
"user": proxyUser,
"pass": proxyPass,
}
proxies = {
"http": proxyMeta,
"https": proxyMeta,
}3、設(shè)置請(qǐng)求頭
請(qǐng)求頭的獲取方式可以參考這篇文章:python使用請(qǐng)求頭部headers處理403錯(cuò)誤_python_腳本之家 (jb51.net)
當(dāng)然不用自己的也行哈哈
# 設(shè)置請(qǐng)求頭,模擬瀏覽器訪(fǎng)問(wèn)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}4、發(fā)起請(qǐng)求
# 發(fā)起請(qǐng)求,獲取網(wǎng)頁(yè)內(nèi)容 url = 'https://maoyan.com/films?showType=3' response = requests.get(url, headers=headers, proxies=proxies) # 添加proxies參數(shù) soup = BeautifulSoup(response.text, 'html.parser')
5、解析網(wǎng)頁(yè)內(nèi)容
# 解析網(wǎng)頁(yè)內(nèi)容,提取專(zhuān)業(yè)評(píng)分?jǐn)?shù)據(jù)
movie_names = []
professional_scores = []
for movie in soup.find_all('div', attrs={'class': 'movie-item film-channel'}):
movie_name = movie.find('span', attrs={'class': 'name'}).text
score = movie.find('span', attrs={'class': 'integer'}).text + movie.find('span', attrs={'class': 'fraction'}).text
movie_names.append(movie_name)
professional_scores.append(score)
# 將數(shù)據(jù)存儲(chǔ)到DataFrame中
data = {'電影名稱(chēng)': movie_names, '專(zhuān)業(yè)評(píng)分': professional_scores}
df = pd.DataFrame(data)6、數(shù)據(jù)可視化
# 數(shù)據(jù)可視化
plt.figure(figsize=(10, 6))
plt.bar(df['電影名稱(chēng)'], df['專(zhuān)業(yè)評(píng)分'], color='skyblue')
plt.title('貓眼電影專(zhuān)業(yè)評(píng)分排行榜')
plt.xlabel('電影名稱(chēng)')
plt.ylabel('專(zhuān)業(yè)評(píng)分')
plt.xticks(rotation=45)
plt.show()上述代碼片段展示了如何運(yùn)用Python中的Requests庫(kù)與BeautifulSoup庫(kù),精準(zhǔn)地抓取貓眼電影網(wǎng)站上的專(zhuān)業(yè)評(píng)分?jǐn)?shù)據(jù)。隨后,通過(guò)Pandas庫(kù)對(duì)數(shù)據(jù)進(jìn)行整理與分析,再借助Matplotlib庫(kù)進(jìn)行可視化呈現(xiàn)。這一數(shù)據(jù)采集、處理與可視化的完整流程。
完整代碼如下:
# 導(dǎo)入所需的庫(kù)
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
# 設(shè)置代理信息
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "your_proxy_user"
proxyPass = "your_proxy_password"
# 設(shè)置代理
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
"host": proxyHost,
"port": proxyPort,
"user": proxyUser,
"pass": proxyPass,
}
proxies = {
"http": proxyMeta,
"https": proxyMeta,
}
# 設(shè)置請(qǐng)求頭,模擬瀏覽器訪(fǎng)問(wèn)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
# 發(fā)起請(qǐng)求,獲取網(wǎng)頁(yè)內(nèi)容
url = 'https://maoyan.com/films?showType=3'
response = requests.get(url, headers=headers, proxies=proxies) # 添加proxies參數(shù)
soup = BeautifulSoup(response.text, 'html.parser')
# 解析網(wǎng)頁(yè)內(nèi)容,提取專(zhuān)業(yè)評(píng)分?jǐn)?shù)據(jù)
movie_names = []
professional_scores = []
for movie in soup.find_all('div', attrs={'class': 'movie-item film-channel'}):
movie_name = movie.find('span', attrs={'class': 'name'}).text
score = movie.find('span', attrs={'class': 'integer'}).text + movie.find('span', attrs={'class': 'fraction'}).text
movie_names.append(movie_name)
professional_scores.append(score)
# 將數(shù)據(jù)存儲(chǔ)到DataFrame中
data = {'電影名稱(chēng)': movie_names, '專(zhuān)業(yè)評(píng)分': professional_scores}
df = pd.DataFrame(data)
# 數(shù)據(jù)可視化
plt.figure(figsize=(10, 6))
plt.bar(df['電影名稱(chēng)'], df['專(zhuān)業(yè)評(píng)分'], color='skyblue')
plt.title('貓眼電影專(zhuān)業(yè)評(píng)分排行榜')
plt.xlabel('電影名稱(chēng)')
plt.ylabel('專(zhuān)業(yè)評(píng)分')
plt.xticks(rotation=45)
plt.show()
當(dāng)然,如果你自己要使用的話(huà)得用自己專(zhuān)屬的IP代理信息,而且具體情況得具體分析。如果你買(mǎi)了代理IP的話(huà),不會(huì)的直接問(wèn)客服,直接給你服務(wù)的服服帖帖的。
小結(jié)
本文詳細(xì)闡述了如何利用Python爬蟲(chóng)技術(shù)從貓眼電影網(wǎng)站獲取專(zhuān)業(yè)評(píng)分?jǐn)?shù)據(jù)的過(guò)程,并通過(guò)代碼實(shí)例展示了從設(shè)置代理、發(fā)起請(qǐng)求、解析網(wǎng)頁(yè)內(nèi)容到數(shù)據(jù)提取與可視化的完整流程。
首先,文章介紹了必要的庫(kù)導(dǎo)入,包括requests用于發(fā)起網(wǎng)絡(luò)請(qǐng)求,BeautifulSoup用于解析HTML頁(yè)面,pandas用于數(shù)據(jù)處理,以及matplotlib用于數(shù)據(jù)可視化。接著,通過(guò)設(shè)置代理和請(qǐng)求頭,模擬了瀏覽器訪(fǎng)問(wèn),成功繞過(guò)了可能存在的反爬蟲(chóng)機(jī)制,獲取了目標(biāo)網(wǎng)頁(yè)的內(nèi)容。
在解析網(wǎng)頁(yè)內(nèi)容方面,文章通過(guò)BeautifulSoup的find_all方法定位到包含電影信息的div元素,并提取了電影名稱(chēng)和專(zhuān)業(yè)評(píng)分?jǐn)?shù)據(jù)。這些數(shù)據(jù)被存儲(chǔ)在一個(gè)列表中,為后續(xù)的數(shù)據(jù)處理和分析提供了基礎(chǔ)。
為了更直觀地展示數(shù)據(jù),文章還利用pandas庫(kù)將提取的數(shù)據(jù)轉(zhuǎn)換成了DataFrame格式,并使用matplotlib庫(kù)繪制了專(zhuān)業(yè)評(píng)分排行榜的條形圖。這不僅有助于讀者更好地理解數(shù)據(jù)分布情況,還能為后續(xù)的深入分析提供直觀的參考。
以上就是python使用代理IP爬取貓眼電影專(zhuān)業(yè)評(píng)分?jǐn)?shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于python代理IP爬取貓眼數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決pip install psycopg2出錯(cuò)問(wèn)題
這篇文章主要介紹了解決pip install psycopg2出錯(cuò)問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
python使用opencv在Windows下調(diào)用攝像頭實(shí)現(xiàn)解析
這篇文章主要介紹了python使用opencv在Windows下調(diào)用攝像頭實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
對(duì)python調(diào)用RPC接口的實(shí)例詳解
今天小編就為大家分享一篇對(duì)python調(diào)用RPC接口的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Flask框架 CSRF 保護(hù)實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Flask框架 CSRF 保護(hù)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Flask-WTF針對(duì)CSRF攻擊的防護(hù)相關(guān)操作技巧,需要的朋友可以參考下2019-10-10
詳解Django框架中用context來(lái)解析模板的方法
這篇文章主要介紹了詳解Django框架中用context來(lái)解析模板的方法,Django是重多高人氣Python框架中最為著名的一個(gè),需要的朋友可以參考下2015-07-07
解決Python?出現(xiàn)File?“<stdin>“,?line?1非語(yǔ)法錯(cuò)誤的問(wèn)題
這篇文章主要介紹了Python?出現(xiàn)File?“<stdin>“,?line?1非語(yǔ)法錯(cuò)誤的解決辦法,本文給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
基于Python編寫(xiě)一個(gè)監(jiān)控CPU的應(yīng)用系統(tǒng)
在使用電腦辦公時(shí),有時(shí)候不知道哪些軟件或進(jìn)程會(huì)占用大量的資源,導(dǎo)致進(jìn)行其他任務(wù)時(shí)出現(xiàn)變慢、卡頓等現(xiàn)象。因此,實(shí)時(shí)監(jiān)控系統(tǒng)的資源就變得非常重要。本文用Python編寫(xiě)了一款超治愈的RunCat監(jiān)控應(yīng)用系統(tǒng),需要的可以參考一下2022-06-06
django rest framework 實(shí)現(xiàn)用戶(hù)登錄認(rèn)證詳解
這篇文章主要介紹了django rest framework 實(shí)現(xiàn)用戶(hù)登錄認(rèn)證詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07

