目錄
前言
一、配置環(huán)境
1.1、 安裝Python
1.2、?安裝Requests庫和BeautifulSoup庫
1.3.、安裝Matplotlib
二、登錄豆瓣網(wǎng)(重點)
2.1、獲取代理
2.2、測試代理ip是否可用
2.3、設(shè)置大量請求頭隨機使用
2.4、登錄豆瓣網(wǎng)
三、爬取某一部熱門電影數(shù)據(jù)
3.1、爬取全部長、短評論
3.2、獲取用戶觀影數(shù)據(jù)
3.3、存入數(shù)據(jù)庫
四、實戰(zhàn)代碼示例
五、總結(jié)
前言
豆瓣網(wǎng)是一個具有影響力的電影評論網(wǎng)站,其中包含大量的用戶評論和評分數(shù)據(jù)。這些數(shù)據(jù)可以用于研究電影市場和用戶觀影習(xí)慣,同時還可以用于電影推薦算法以及在線視頻網(wǎng)站的用戶行為分析等方面,因此對于想要學(xué)習(xí)數(shù)據(jù)分析和機器學(xué)習(xí)的人來說,爬取豆瓣網(wǎng)電影評論數(shù)據(jù)是一個很好的練手項目。
本文將詳細介紹如何使用Python爬蟲抓取豆瓣網(wǎng)電影評論用戶的觀影習(xí)慣數(shù)據(jù),并進行簡單的數(shù)據(jù)處理和分析。
一、配置環(huán)境
在開始爬取豆瓣網(wǎng)電影評論數(shù)據(jù)之前,我們需要配置好Python開發(fā)環(huán)境和相關(guān)依賴庫。
1.1、 安裝Python
首先,我們需要安裝Python。建議使用Python 3.x版本??梢栽诠倬W(wǎng)下載并安裝對應(yīng)版本的Python:https://www.python.org/downloads/。
1.2、?安裝Requests庫和BeautifulSoup庫
接下來,我們需要安裝兩個Python庫:Requests和BeautifulSoup。Requests庫可以用于發(fā)送HTTP請求,獲取網(wǎng)頁內(nèi)容,而BeautifulSoup庫可以用于解析HTML文檔,提取所需數(shù)據(jù)。
可以使用pip命令自動安裝這兩個庫:
pip install requests
pip install beautifulsoup4
1.3.、安裝Matplotlib
如果我們需要對抓取的數(shù)據(jù)進行可視化分析,可以使用Matplotlib庫??梢允褂胮ip命令安裝:
pip install matplotlib
安裝完成后,我們就可以開始爬取豆瓣網(wǎng)電影評論數(shù)據(jù)了。
二、登錄豆瓣網(wǎng)(重點)
豆瓣網(wǎng)對爬蟲有一定的反爬蟲策略,根據(jù)實戰(zhàn)經(jīng)驗反爬一般作用于用戶ID、用戶IP和請求頭的過濾,為了避免被封禁IP,代碼中需要加入一些反爬蟲措施:
- 設(shè)置請求間隔
- 使用代理IP
- 偽裝請求頭等
2.1、獲取代理
??使用代理可以幫助我們隱藏自己的真實IP地址,避免被封禁IP或者限制訪問。在爬取豆瓣網(wǎng)電影評論數(shù)據(jù)時,如果頻繁地訪問同一個IP地址,豆瓣網(wǎng)可能會禁止我們的訪問,因此使用代理也可以防止被封禁。這里我使用的是站大爺代理ip來進行操作的。
??以下是使用用戶名+密碼授權(quán)獲取ip代碼示例:
?import requests
#你要訪問的網(wǎng)址
url = 'http://www.ip138.com/'
proxies = {
????????'http': 'http://賬號:密碼@ip:port',
????????'https': 'http://賬號:密碼@ip:port'
#“用戶名+密碼”授權(quán),賬號為實例ID,密碼為8位數(shù)字的密碼,不用MD5加密,在后臺的實例管理下可以看到
????}
response = requests.get(url, proxies=proxies)
2.2、測試代理ip是否可用
??測試代理IP是否可用是為了確保我們使用的代理IP能夠正常工作,防止由于代理IP失效或無效而導(dǎo)致爬蟲請求失敗。一般來說,我們可以通過發(fā)送請求來測試代理IP是否可用,如果請求成功則說明代理IP可用,否則說明代理IP無效或被封禁。
測試代理IP的代碼可以通過如下方式實現(xiàn):
- ? ? ? 定義一個函數(shù),接收代理IP和目標網(wǎng)站URL作為參數(shù)
- ? ? ? 在函數(shù)中,使用requests庫發(fā)送請求,并設(shè)置代理IP
- ? ? ? 如果請求成功,則說明代理IP可用,返回True
- ? ? ? 如果請求失敗,則說明代理IP無效或被封禁,返回False
以下是一段測試代理IP的代碼示例:
import requests
def test_proxy_ip(proxy_ip, target_url):
????proxies = {
???????'http': 'http://' + proxy_ip,
????????'https': 'http://' + proxy_ip
????}
????try:
????????response = requests.get(target_url, proxies=proxies, timeout=5)
????????if response.status_code == 200:
????????????return True
????????else:
????????????return False
????except:
????????return False
在上述代碼中,我們定義了一個test_proxy_ip函數(shù),該函數(shù)接收代理IP和目標網(wǎng)站URL作為參數(shù)。在函數(shù)中,我們首先根據(jù)傳入的代理IP構(gòu)造proxies字典,然后使用requests庫發(fā)送請求,并設(shè)置proxies參數(shù)為該字典。如果請求成功,則說明代理IP可用,函數(shù)返回True;否則函數(shù)返回False。
當我們在爬取豆瓣網(wǎng)電影評論數(shù)據(jù)時,可以使用上述代碼測試代理IP是否可用。如果代理IP可用,則使用該代理IP發(fā)送請求;如果代理IP無效或被封禁,則需要更換新的代理IP。
2.3、設(shè)置大量請求頭隨機使用
??爬取豆瓣網(wǎng)電影評論用戶的觀影習(xí)慣數(shù)據(jù)要設(shè)置大量請求頭隨機使用是為了防止網(wǎng)站監(jiān)測到我們的請求頭是模擬的,并防止被反爬蟲機制封禁IP。因此,我們需要盡可能多的提供不同的請求頭信息,對請求頭進行隨機使用,以降低被監(jiān)測到的概率。
以下是一個隨機使用請求頭的示例代碼:
import random
USER_AGENTS = [
??'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582',
??'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0',
??'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299',
??# 更多用戶代理信息...
]
def get_random_user_agent():
????return random.choice(USER_AGENTS)
headers = {
???'User-Agent': get_random_user_agent(),
???'Referer': 'https://www.douban.com',
???'Cookie': 'your_cookie'
}
在以上代碼中,我們定義了一個USER_AGENTS列表,包含多個常用瀏覽器的User-Agent信息。然后定義了一個`get_random_user_agent()`函數(shù),用于隨機從USER_AGENTS列表中獲取一個User-Agent信息。最后,我們設(shè)置headers變量,使用`get_random_user_agent()`函數(shù)獲取隨機的User-Agent信息,并將其賦值到headers變量中,作為請求頭信息。
需要注意的是,我們在使用隨機請求頭的同時,仍然需要保持一定的爬取速度和請求間隔,以避免被封禁。同時,如果服務(wù)器在返回的內(nèi)容中發(fā)現(xiàn)請求頭信息異常,我們也可能被視為爬蟲而被封禁。因此,在進行豆瓣網(wǎng)電影評論用戶數(shù)據(jù)爬取時,需要謹慎處理請求頭信息。
2.4、登錄豆瓣網(wǎng)
以下是一個使用selenium模擬登錄豆瓣網(wǎng)并保存cookie的示例代碼:
from selenium import webdriver
import time
import pickle
login_url = 'https://accounts.douban.com/passport/login?source=movie'
username = 'your_username'
password = 'your_password'
cookie_file = 'cookies.pkl'
# 啟動瀏覽器
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
# 訪問登錄頁面
driver.get(login_url)
# 輸入用戶名和密碼
driver.find_element_by_id('username').send_keys(username)
driver.find_element_by_id('password').send_keys(password)
# 等待用戶輸入驗證碼
time.sleep(30)
# 點擊登錄按鈕
driver.find_element_by_class_name('account-form-field-submit ').click()
# 等待新頁面加載完成
time.sleep(10)
# 保存cookie到文件
cookies = driver.get_cookies()
with open(cookie_file, 'wb') as f:
????pickle.dump(cookies, f)
# 關(guān)閉瀏覽器
driver.quit()
在以上代碼中,我們首先初始化了一些變量,包括登錄頁面的URL、豆瓣賬號的用戶名和密碼、以及保存cookie的文件名。
然后,我們啟動了Chrome瀏覽器,并通過`driver.get()`方法訪問了豆瓣登錄頁面。接著,我們使用`selenium`模擬了用戶在頁面上輸入了用戶名和密碼,并等待了30秒,以留出時間輸入驗證碼。
最后,我們點擊登錄按鈕,等待新頁面加載完成,獲取了cookies并將其保存到本地文件中。注意,這里我們使用了pickle模塊將cookies對象序列化并保存到文件中,以便后續(xù)使用。
同時,我們還使用了`driver.quit()`方法關(guān)閉了瀏覽器。
三、爬取某一部熱門電影數(shù)據(jù)
??前面我們已經(jīng)把爬取豆瓣網(wǎng)的準備工作全部完成,然后接下來就是爬取豆瓣網(wǎng)中某一部熱門電影的各種數(shù)據(jù)了
3.1、爬取全部長、短評論
爬取熱門電影的全部長短評論可以獲得以下信息:
- ? ? ? 用戶評價:通過閱讀用戶的評論,可以了解用戶對電影的評價、看法和推薦指數(shù)等信息,有助于我們更好地了解電影的口碑和觀眾反應(yīng)。
- ? ? ? 關(guān)鍵詞提?。和ㄟ^分析評論文本提取關(guān)鍵詞,可以了解電影的主題、情感、人物關(guān)系等信息,有助于我們深入了解電影的故事情節(jié)和風格。
- ? ? ? 數(shù)據(jù)分析:通過統(tǒng)計評論數(shù)量、評分分布、用戶畫像等數(shù)據(jù),可以幫助我們更好地了解電影的市場表現(xiàn)和受眾群體,為影視公司、制片人和電影院等決策者提供有價值的數(shù)據(jù)支持。
因此,爬取熱門電影的全部長短評論是一項非常有價值的工作,可以為我們提供大量有用的信息和數(shù)據(jù)分析基礎(chǔ)。
以下是一個使用BeautifulSoup和requests庫爬取豆瓣網(wǎng)某部電影全部長、短評論說明的示例代碼
import requests
from bs4 import BeautifulSoup
# 設(shè)置請求頭
headers = {
????'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
# 豆瓣電影頁面URL
url = 'https://movie.douban.com/subject/1292052/'
# 發(fā)送請求獲取頁面HTML
response = requests.get(url, headers=headers)
html = response.text
# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html, 'html.parser')
# 查找長評和短評標簽
long_comments = soup.select_one('#hot-comments > div > div.article > span')
short_comments = soup.select_one('#comments > div > h2 > span')
# 提取評論數(shù)量并輸出
long_comments_count = long_comments.text.replace('全部', '').replace('條', '').strip()
short_comments_count = short_comments.text.replace('全部', '').replace('條', '').strip()
print(f"長評:{long_comments_count}")
print(f"短評:{short_comments_count}")
# 查找所有長評和短評內(nèi)容
long_comments_list = soup.select('#hot-comments > div > div.article > div > div.comment > p')
short_comments_list = soup.select('#comments > div > div.comment > p')
# 輸出每個評論的內(nèi)容
for comment in long_comments_list:
????print(comment.text.strip())???
for comment in short_comments_list:
????print(comment.text.strip())
在以上代碼中,我們首先設(shè)置了請求頭,指定了請求的User-Agent信息。然后,我們定義了電影頁面的URL,并發(fā)送了GET請求獲取了頁面的HTML。
接著,我們使用BeautifulSoup解析了頁面的HTML,并查找了長評和短評標簽。通過提取標簽文本中的評論數(shù)量信息,我們可以輸出電影的長、短評數(shù)量。
最后,我們再次使用CSS選擇器查找所有長、短評內(nèi)容,并通過遍歷列表輸出了每個評論的文本內(nèi)容。
3.2、獲取用戶觀影數(shù)據(jù)
??獲取用戶觀影數(shù)據(jù)可以幫助我們了解用戶的觀影喜好和習(xí)慣,可以通過分析用戶的觀影歷史和評分記錄等內(nèi)容,得到以下信息:
- ? ? ? 用戶偏好:根據(jù)用戶觀影歷史和評分記錄,可以了解用戶的觀影偏好和喜好,有助于我們推薦更符合用戶口味的電影和影視作品
- ? ? ? 影視推薦:通過分析用戶的觀影歷史和評分記錄,可以為用戶推薦更符合其口味的電影和影視作品,提高用戶體驗和滿意度
- ? ? ? 數(shù)據(jù)分析:通過統(tǒng)計用戶評分和觀影記錄,可以了解影片的市場表現(xiàn)和受眾群體,為制片人、電影院和影視公司等提供有價值的數(shù)據(jù)分析支持
因此,獲取用戶觀影數(shù)據(jù)是一項非常有價值的工作。以下是獲取用戶觀影數(shù)據(jù)的Python代碼示例:
import requests
import json
# 登錄豆瓣網(wǎng)
session = requests.session()
url = 'https://accounts.douban.com/j/mobile/login/basic'
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',
????'Referer': 'https://accounts.douban.com/passport/login',
}
data = {
????'name': 'your_username', # 替換為自己的用戶名
????'password': 'your_password', # 替換為自己的密碼
????'remember': 'false',
}
session.post(url, headers=headers, data=data)
# 獲取用戶觀影數(shù)據(jù)
uid = 'your_user_id' # 替換為自己的用戶ID
url = 'https://movie.douban.com/subject_suggest?q=%E7%94%B5%E5%BD%B1' # 電影頁面URL
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',
????'Referer': 'https://www.douban.com/',
}
response = session.get(url, headers=headers)
data = json.loads(response.text)
movie_id = data[0]['id'] # 獲取電影ID
url = f'https://movie.douban.com/subject/{movie_id}/' # 獲取電影詳情頁面URL
response = session.get(url, headers=headers)
url = response.url + 'comments?start=0&limit=20&status=P&sort=new_score' # 獲取電影短評頁面URL
response = session.get(url, headers=headers)
data = response.text
print(data) # 輸出評論內(nèi)容
以上代碼示例中,我們首先需要登錄豆瓣網(wǎng),然后通過獲取電影ID和電影詳情頁面URL來獲取其熱門評論頁面的URL,最后通過發(fā)送HTTP請求獲取評論數(shù)據(jù)。注意,需要設(shè)置請求頭信息,以避免請求被網(wǎng)站屏蔽。
3.3、存入數(shù)據(jù)庫
將獲取的數(shù)據(jù)存入數(shù)據(jù)庫的好處:
- ? ? ? 數(shù)據(jù)持久化:將數(shù)據(jù)存入數(shù)據(jù)庫中可以保證數(shù)據(jù)長期保存,避免數(shù)據(jù)丟失的情況
- ? ? ? 數(shù)據(jù)分析:將數(shù)據(jù)存入數(shù)據(jù)庫后,可以使用SQL等工具進行數(shù)據(jù)分析和數(shù)據(jù)挖掘,得到更深入的信息和結(jié)論
- ? ? ? 數(shù)據(jù)管理:將數(shù)據(jù)存入數(shù)據(jù)庫后,可以方便對數(shù)據(jù)進行管理、查詢和更新
以下是將獲取的去重后的數(shù)據(jù)存入數(shù)據(jù)庫的Python代碼示例:
import requests
import json
import pymysql
# 登錄豆瓣網(wǎng)
session = requests.session()
url = 'https://accounts.douban.com/j/mobile/login/basic'
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',
????'Referer': 'https://accounts.douban.com/passport/login',
}
data = {
????'name': 'your_username', # 替換為自己的用戶名
????'password': 'your_password', # 替換為自己的密碼
????'remember': 'false',
}
session.post(url, headers=headers, data=data)
# 獲取用戶觀影數(shù)據(jù)
uid = 'your_user_id' # 替換為自己的用戶ID
url = 'https://movie.douban.com/subject_suggest?q=%E7%94%B5%E5%BD%B1' # 電影頁面URL
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',
????'Referer': 'https://www.douban.com/',
}
response = session.get(url, headers=headers)
data = json.loads(response.text)
movie_id = data[0]['id'] # 獲取電影ID
url = f'https://movie.douban.com/subject/{movie_id}/' # 獲取電影詳情頁面URL
response = session.get(url, headers=headers)
url = response.url + 'comments?start=0&limit=20&status=P&sort=new_score' # 獲取電影短評頁面URL
response = session.get(url, headers=headers)
data = response.json()
result = []
for comment in data['comments']:
????item = {
????????'id': comment['id'],
????????'user_name': comment['author']['name'],
????????'rating': comment['rating']['value'],
????????'create_time': comment['created_at'],
????????'content': comment['content'],
????}
????result.append(item)
# 去重
result2 = []
for i in result:
????if i not in result2:
????????result2.append(i)
# 存入數(shù)據(jù)庫
db = pymysql.connect(host='localhost', user='root', password='123456', database='test')
cursor = db.cursor()
for item in result2:
????sql = f"insert into movie_comment (id, user_name, rating, create_time, content) values ({item['id']}, '{item['user_name']}', {item['rating']}, '{item['create_time']}', '{item['content']}')"
????cursor.execute(sql)
db.commit()
db.close()
以上代碼示例中,我們使用Python連接到本地MySQL數(shù)據(jù)庫,并將去重后的數(shù)據(jù)存入到數(shù)據(jù)庫中的movie_comment表中。注意,需要根據(jù)自己的數(shù)據(jù)庫用戶名、密碼、數(shù)據(jù)庫名以及數(shù)據(jù)表名進行替換。
四、實戰(zhàn)代碼示例
由于豆瓣網(wǎng)對爬蟲有一定的反爬蟲策略,為了避免被封禁IP,代碼中需要加入一些反爬蟲措施,如設(shè)置請求間隔、使用代理IP、偽裝請求頭等。
以下是一個基于Python的爬蟲示例,可以爬取指定電影的所有評論用戶的觀影習(xí)慣數(shù)據(jù),并保存至CSV文件中:
import?requestsfrom?bs4 import?BeautifulSoupimport?csvimport?timefrom?random import?randint
MOVIE_URL = 'https://movie.douban.com/subject/xxxxxx/'?# 請?zhí)鎿Q成具體電影的URL
CSV_FILE = 'douban.csv'?# CSV文件名
# 設(shè)置請求頭部信息,包括User-Agent和Referer
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',
? ? 'Referer': MOVIE_URL,
}
# 設(shè)置代理IP列表,用于反爬蟲策略
proxies = ['http://xxx.xxx.xx.xx:xxxx', 'http://yyy.yyy.yy.yy:yyyy', ...] # 請?zhí)鎿Q成實際的代理IP
# 設(shè)置請求間隔,用于反爬蟲策略
WAIT_TIME = 1?# 單位為秒,可適當調(diào)整
# 定義函數(shù)獲取指定URL的HTML內(nèi)容def?get_html(url):
? ? try:
? ? ? ? proxy = {'http': proxies[randint(0, len(proxies)-1)]} # 從代理IP列表中隨機選擇一個代理
? ? ? ? response = requests.get(url, headers=headers, proxies=proxy)
? ? ? ? if?response.status_code == 200:
? ? ? ? ? ? return?response.text
? ? except?requests.exceptions.RequestException as?e:
? ? ? ? print(e)
? ? ? ? return?None
# 獲取評論用戶主頁鏈接def?get_user_link(comment_soup):
? ? try:
? ? ? ? user_tag = comment_soup.find('span', class_='comment-info').find('a')
? ? ? ? user_link = user_tag.get('href')
? ? ? ? return?user_link
? ? except:
? ? ? ? return?None
# 解析評論用戶主頁,獲取觀影習(xí)慣數(shù)據(jù)def?get_user_data(user_link):
? ? user_data = {}
? ? html = get_html(user_link)
? ? time.sleep(WAIT_TIME)
? ? if?html:
? ? ? ? soup = BeautifulSoup(html, 'html.parser')
? ? ? ? # 獲取用戶??搭愋?? ? ? ? try:
? ? ? ? ? ? type_tags = soup.find_all('span', class_='tags-body')
? ? ? ? ? ? type_list = [t.text.strip() for?t in?type_tags]
? ? ? ? ? ? user_data['type'] = ','.join(type_list)
? ? ? ? except:
? ? ? ? ? ? user_data['type'] = ''
? ? ? ? # 獲取用戶評分前幾名的電影(除當前電影外)
? ? ? ? user_data['top_movies'] = ''
? ? ? ? try:
? ? ? ? ? ? movie_tags = soup.find_all('div', class_='info')
? ? ? ? ? ? movie_list = []
? ? ? ? ? ? for?tag in?movie_tags:
? ? ? ? ? ? ? ? movie_name_tag = tag.find('a', class_='title')
? ? ? ? ? ? ? ? if?movie_name_tag and?movie_name_tag['href'] != MOVIE_URL: # 排除當前電影
? ? ? ? ? ? ? ? ? ? movie_list.append(movie_name_tag.text)
? ? ? ? ? ? ? ? if?len(movie_list) >= 5: # 最多獲取前5名
? ? ? ? ? ? ? ? ? break
? ? ? ? ? ? user_data['top_movies'] = ','.join(movie_list)
? ? ? ? except:
? ? ? ? ? ? pass
? ? return?user_data
# 主函數(shù)def?main():
? ? print('開始爬取...')
? ? # 獲取評論列表
? ? comments = []
? ? page = 0
? ? while?True:
? ? ? ? page += 1
? ? ? ? url = MOVIE_URL + 'comments?start='?+ str((page-1) * 20)
? ? ? ? html = get_html(url)
? ? ? ? time.sleep(WAIT_TIME)
? ? ? ? if?html:
? ? ? ? ? ? soup = BeautifulSoup(html, 'html.parser')
? ? ? ? ? ? comment_tags = soup.find_all('div', class_='comment-item')
? ? ? ? ? ? if?comment_tags:
? ? ? ? ? ? ? comments.extend(comment_tags)
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? break?# 沒有更多評論
? ? ? ? else:
? ? ? ? ? ? break?# 請求失敗
? ? # 獲取每個評論用戶的觀影習(xí)慣數(shù)據(jù)
? ? user_data_list = []
? ? for?comment in?comments:
? ? ? ? user_link = get_user_link(comment)
? ? ? ? if?user_link:
? ? ? ? ? ? user_data = get_user_data(user_link)
? ? ? ? ? ? user_data_list.append(user_data)
? ? ? ? ? ? print('已爬取 {} 個用戶觀影數(shù)據(jù)'.format(len(user_data_list)))
? ? ? ? ? ? time.sleep(WAIT_TIME)
? ? # 將數(shù)據(jù)保存至CSV文件
? ? with?open(CSV_FILE, mode='w', encoding='utf-8', newline='') as?f:
? ? ? ? fieldnames = ['type', 'top_movies']
? ? ? ? writer = csv.DictWriter(f, fieldnames=fieldnames)
? ? ? ? writer.writeheader()
? ? ? ? for?data in?user_data_list:
? ? ? ? ? ? writer.writerow(data)
? ? print('爬取完成,數(shù)據(jù)已保存至 {} 文件中。'.format(CSV_FILE))
if?__name__ == '__main__':
? ? main()
需要注意的是,以上代碼僅供參考,實際使用時需要根據(jù)具體情況進行調(diào)整。另外,爬蟲涉及到的法律問題和道德問題需要認真考慮,不要用于非法用途或侵犯他人隱私等行為。
需要注意的幾點:文章來源:http://www.zghlxwxcb.cn/news/detail-703790.html
- 為了避免被豆瓣網(wǎng)封禁IP,建議設(shè)置訪問間隔時間至少為1秒
- 豆瓣網(wǎng)的HTML代碼變化頻繁,需要不斷調(diào)整解析代碼以適應(yīng)新的HTML格式
- 爬取用戶信息可能涉及到用戶隱私,應(yīng)嚴格按照相關(guān)法律法規(guī)來進行。
五、總結(jié)
爬取豆瓣網(wǎng)電影評論用戶的觀影習(xí)慣數(shù)據(jù)能夠得出用戶的觀影時間偏好、觀影類型偏好、觀影評分偏好、觀影影院偏好和地理位置偏好等信息。通過這些數(shù)據(jù)分析,豆瓣網(wǎng)能夠更好地為用戶推薦電影和為廣告主提供更精準的廣告投放服務(wù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-703790.html
到了這里,關(guān)于【Python】爬蟲練習(xí)-爬取豆瓣網(wǎng)電影評論用戶的觀影習(xí)慣數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!