python使用代理IP爬取貓眼電影專業(yè)評(píng)分?jǐn)?shù)據(jù)
前言
我們?yōu)槭裁葱枰褂肐P代理服務(wù)?
在編寫爬蟲程序的過(guò)程中,IP封鎖無(wú)疑是一個(gè)常見(jiàn)且棘手的問(wèn)題。盡管網(wǎng)絡(luò)上存在大量的免費(fèi)IP代理網(wǎng)站,但其質(zhì)量往往參差不齊,令人堪憂。許多代理IP的延遲過(guò)高,嚴(yán)重影響了爬蟲的工作效率;更糟糕的是,其中不乏大量已經(jīng)失效的代理IP,使用這些IP不僅無(wú)法繞過(guò)封鎖,反而可能使爬蟲陷入更深的困境。
本篇文章中介紹一下如何使用Python的Requests庫(kù)和BeautifulSoup庫(kù)來(lái)抓取貓眼電影網(wǎng)站上的專業(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)求頭,模擬瀏覽器訪問(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)容,提取專業(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 = {'電影名稱': movie_names, '專業(yè)評(píng)分': professional_scores}
df = pd.DataFrame(data)6、數(shù)據(jù)可視化
# 數(shù)據(jù)可視化
plt.figure(figsize=(10, 6))
plt.bar(df['電影名稱'], df['專業(yè)評(píng)分'], color='skyblue')
plt.title('貓眼電影專業(yè)評(píng)分排行榜')
plt.xlabel('電影名稱')
plt.ylabel('專業(yè)評(píng)分')
plt.xticks(rotation=45)
plt.show()上述代碼片段展示了如何運(yùn)用Python中的Requests庫(kù)與BeautifulSoup庫(kù),精準(zhǔn)地抓取貓眼電影網(wǎng)站上的專業(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)求頭,模擬瀏覽器訪問(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)容,提取專業(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 = {'電影名稱': movie_names, '專業(yè)評(píng)分': professional_scores}
df = pd.DataFrame(data)
# 數(shù)據(jù)可視化
plt.figure(figsize=(10, 6))
plt.bar(df['電影名稱'], df['專業(yè)評(píng)分'], color='skyblue')
plt.title('貓眼電影專業(yè)評(píng)分排行榜')
plt.xlabel('電影名稱')
plt.ylabel('專業(yè)評(píng)分')
plt.xticks(rotation=45)
plt.show()
當(dāng)然,如果你自己要使用的話得用自己專屬的IP代理信息,而且具體情況得具體分析。如果你買了代理IP的話,不會(huì)的直接問(wèn)客服,直接給你服務(wù)的服服帖帖的。
小結(jié)
本文詳細(xì)闡述了如何利用Python爬蟲技術(shù)從貓眼電影網(wǎng)站獲取專業(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)求頭,模擬了瀏覽器訪問(wèn),成功繞過(guò)了可能存在的反爬蟲機(jī)制,獲取了目標(biāo)網(wǎng)頁(yè)的內(nèi)容。
在解析網(wǎng)頁(yè)內(nèi)容方面,文章通過(guò)BeautifulSoup的find_all方法定位到包含電影信息的div元素,并提取了電影名稱和專業(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ù)繪制了專業(yè)評(píng)分排行榜的條形圖。這不僅有助于讀者更好地理解數(shù)據(jù)分布情況,還能為后續(xù)的深入分析提供直觀的參考。
以上就是python使用代理IP爬取貓眼電影專業(yè)評(píng)分?jǐn)?shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于python代理IP爬取貓眼數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python調(diào)用騰訊云實(shí)名認(rèn)證接口辨別身份證真假
這篇文章主要為大家介紹了python辨別身份真假之騰訊云身份證實(shí)名認(rèn)證接口,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python中多線程的創(chuàng)建及基本調(diào)用方法
由于注明的GIL的存在,Python盡管能創(chuàng)建多個(gè)線程,但是多線程卻不能同時(shí)工作...well,這里我們來(lái)看一下Python中多線程的創(chuàng)建及基本調(diào)用方法2016-07-07
Python實(shí)現(xiàn)圖像增強(qiáng)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)圖像增強(qiáng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
Python Socket 編程知識(shí)點(diǎn)詳細(xì)介紹
這篇文章主要介紹了Python Socket 編程,Socket又稱為套接字,它是所有網(wǎng)絡(luò)通信的基礎(chǔ)。網(wǎng)絡(luò)通信其實(shí)就是進(jìn)程間的通信,Socket主要是使用IP地址,協(xié)議,端口號(hào)來(lái)標(biāo)識(shí)一個(gè)進(jìn)程,下文詳細(xì)內(nèi)容,需要的小伙伴可以參考一下2022-02-02
每天遷移MySQL歷史數(shù)據(jù)到歷史庫(kù)Python腳本
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)每天遷移MySQL歷史數(shù)據(jù)到歷史庫(kù)的腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
python 找出list中最大或者最小幾個(gè)數(shù)的索引方法
今天小編就為大家分享一篇python 找出list中最大或者最小幾個(gè)數(shù)的索引方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
python中drop_duplicates()函數(shù)的具體使用
本文主要介紹了python中drop_duplicates()函數(shù)的具體使用,介紹了其四個(gè)核心參數(shù)subset、keep、inplace和ignore_index,具有一定的參考價(jià)值,感興趣的可以了解一下2026-04-04
Python自動(dòng)化操作Excel的多種方式(Pandas+openpyxl+xlrd)
這篇文章主要為大家詳細(xì)介紹了Python自動(dòng)化操作Excel的多種方式,包括Pandas,openpyxl和xlrd,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-08-08

