前言
嗨嘍~大家好呀,這里是魔王吶 ? ~!

環(huán)境使用:
Python 3.8 解釋器
Pycharm 編輯器
模塊使用:
import parsel >>> pip install parsel
import requests >>> pip install requests
import csv
爬蟲基本思路:
一. 數(shù)據(jù)來源分析:
-
明確需求
明確采集的網(wǎng)站是什么?
-
明確采集的數(shù)據(jù)是什么?
影評(píng)相關(guān)數(shù)據(jù)內(nèi)容: 昵稱/時(shí)間/內(nèi)容/歸屬地...
-
抓包分析
通過開發(fā)者工具進(jìn)行抓包分析
打開開發(fā)者工具: 在網(wǎng)頁(yè)上面 F12 / 鼠標(biāo)右鍵點(diǎn)擊檢查選擇network
刷新網(wǎng)頁(yè): 讓網(wǎng)頁(yè)數(shù)據(jù)重新加載一遍
通過關(guān)鍵字搜索數(shù)據(jù)來源: 關(guān)鍵字<要獲取的數(shù)據(jù)>
二. 代碼實(shí)現(xiàn)步驟:
發(fā)送請(qǐng)求, 模擬瀏覽器對(duì)于url地址發(fā)送請(qǐng)求
-
獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)
開發(fā)者工具: response
-
解析數(shù)據(jù), 提取我們想要的數(shù)據(jù)內(nèi)容\
影評(píng)相關(guān)數(shù)據(jù)
保存數(shù)據(jù), 把數(shù)據(jù)內(nèi)容保存csv表格文件里面
代碼展示
# 導(dǎo)入數(shù)據(jù)請(qǐng)求模塊 --> 第三方模塊, 需要安裝 pip install requests
import requests
# 導(dǎo)入數(shù)據(jù)解析模塊 --> 第三方模塊, 需要安裝 pip install parsel
import parsel
# 導(dǎo)入csv模塊 --> 內(nèi)置模塊, 不需要安裝
import csv
"""
- 安裝模塊:
1. win + R 輸入cmd 然后輸入 安裝命令 pip install requests
2. 在pycharm終端里面 輸入安裝命令 pip install requests - 模擬瀏覽器: --> headers 請(qǐng)求頭 <開發(fā)者工具進(jìn)行復(fù)制>
把python代碼偽裝成瀏覽器去發(fā)送請(qǐng)求
目的: 為了防止被反爬
反爬: 你得不到數(shù)據(jù), 或者返回的數(shù)據(jù)不是你想要的 - 如何批量替換
1. 選中替換內(nèi)容, ctrl + R
2. 勾選上 .* 正則
3. 輸入正則匹配規(guī)則, 進(jìn)行替換
:.*
, - 采集的速度過快/頻繁, 可能會(huì)IP異常
解決方法:
1. 登陸賬號(hào)加上cookie
2. 用IP代理, 切換IP
免費(fèi)的IP, https 可能用不了 HTTP有一些可以的, 質(zhì)量不好
氪金的IP 一個(gè)IP 幾分錢一個(gè)- 多頁(yè)的數(shù)據(jù)采集
分析請(qǐng)求鏈接的變化規(guī)律
- 多頁(yè)的數(shù)據(jù)采集
你要從事pachong崗位, 這方面工作: <采集的數(shù)據(jù)量比較大>
天天和反爬打交道了JS逆向,加密 反爬IP被封,賬號(hào)被封
"""
- 發(fā)送請(qǐng)求, 模擬瀏覽器對(duì)于url地址發(fā)送請(qǐng)求
# 0<起始數(shù)包含>, 201<末尾數(shù)不包含>, 20<步長(zhǎng)>
for page in range(0, 201, 20):
# 請(qǐng)求鏈接 字符串格式化方法 -->
url = f'https://movie.****.com/subject/4811774/comments?start={page}&limit=20&status=P&sort=new_score'
# 偽裝模擬
headers = {
# User-Agent 用戶代理, 表示瀏覽器基本身份信息
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 發(fā)送請(qǐng)求
response = requests.get(url=url, headers=headers)
"""
-
獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)
開發(fā)者工具: response
response.text --> 獲取響應(yīng)文本數(shù)據(jù)
response --> 響應(yīng)對(duì)象
text --> 文本
"""
# 把獲取下來html字符傳數(shù)據(jù)<response.text>, 轉(zhuǎn)換可解析的對(duì)象
selector = parsel.Selector(response.text)
"""
-
解析數(shù)據(jù), 提取我們想要的數(shù)據(jù)內(nèi)容
影評(píng)相關(guān)數(shù)據(jù)
css選擇器: 根據(jù)標(biāo)簽屬性提取數(shù)據(jù)內(nèi)容
"""
# 第一次提取所有內(nèi)容
divs = selector.css('div.comment-item')
# 把列表里面元素一個(gè)一個(gè)提取出來, for循環(huán)遍歷
for div in divs:
"""
湖南 長(zhǎng)沙
.comment-info a::text --> 提取類名為comment-info標(biāo)簽下面a標(biāo)簽里面文本數(shù)據(jù)
get() --> 獲取第一個(gè)標(biāo)簽數(shù)據(jù), 返回字符串?dāng)?shù)據(jù)類型
attr() --> 獲取標(biāo)簽里面屬性
"""
name = div.css('.comment-info a::text').get() # 昵稱
rating = div.css('.rating::attr(title)').get() # 評(píng)分
date = div.css('.comment-time ::attr(title)').get() # 日期
area = div.css('.comment-location::text').get() # 歸屬地
short = div.css('.short::text').get().replace('\n', '') # 評(píng)論
count = div.css('.vote-count::text').get() # 有用
# 把數(shù)據(jù)放到字典里面
dit = {
'昵稱': name,
'評(píng)分': rating,
'日期': date,
'歸屬地': area,
'評(píng)論': short,
'有用': count,
}
# 寫入數(shù)據(jù)
csv_writer.writerow(dit)
print(name, rating, date, area, short, count)
創(chuàng)建文件對(duì)象
f = open('影評(píng).csv', mode='a', encoding='utf-8-sig', newline='')
# f 文件對(duì)象 fieldnames 表頭/字段名
csv_writer = csv.DictWriter(f, fieldnames=[
'昵稱',
'評(píng)分',
'日期',
'歸屬地',
'評(píng)論',
'有用',
])
# 寫入表頭
csv_writer.writeheader()
繪制詞云圖
模塊導(dǎo)入
# 導(dǎo)入結(jié)巴模塊 --> 第三方模塊, 需要安裝 pip install jieba
import jieba
# 導(dǎo)入pandas --> 第三方模塊, 需要安裝 pip install pandas
import pandas as pd
# 導(dǎo)入詞云模塊 --> 第三方模塊, 需要安裝 pip install wordcloud
import wordcloud
讀取csv表格里面數(shù)據(jù)內(nèi)容
df = pd.read_csv('影評(píng).csv')
獲取評(píng)論內(nèi)容
content_list = df['評(píng)論'].to_list()
# 把列表轉(zhuǎn)成字符串
content = ''.join(content_list)
# 進(jìn)行分詞處理
string = ' '.join(jieba.lcut(content))
詞云圖配置
wc = wordcloud.WordCloud(
width=1000, # 寬
height=700, # 高
background_color='white', # 背景顏色
font_path='msyh.ttc', # 設(shè)置字體
stopwords={'了', '的', '是', '我', '在', '和'},
scale=15
)
# 傳入文字內(nèi)容
wc.generate(string)
# 輸出詞云圖
wc.to_file('詞云圖.png')
print(string)
尾語 ??
要成功,先發(fā)瘋,下定決心往前沖!
學(xué)習(xí)是需要長(zhǎng)期堅(jiān)持的,一步一個(gè)腳印地走向未來!
未來的你一定會(huì)感謝今天學(xué)習(xí)的你。
—— 心靈雞湯
本文章到這里就結(jié)束啦~感興趣的小伙伴可以復(fù)制代碼去試試哦 ??
