項(xiàng)目功能簡(jiǎn)介:
1.交互式配置;
2.兩種任意關(guān)鍵詞來(lái)源(直接輸入、本地關(guān)鍵詞文件);
3.自動(dòng)翻頁(yè)(無(wú)限爬取);
4.指定最大翻頁(yè)頁(yè)碼;
5.數(shù)據(jù)保存到csv文件;
6.程序支持打包成exe文件;
7.項(xiàng)目操作說(shuō)明文檔;
一.最終效果
視頻演示:
用python爬取微博關(guān)鍵詞搜索結(jié)果、exe文件視頻演示
二.項(xiàng)目代碼
2.1 數(shù)據(jù)來(lái)源分析
使用chrome瀏覽器,F(xiàn)12打開(kāi)調(diào)試面板,使用元素選擇工具確定元素位置,如下圖
確定頁(yè)面元素:
說(shuō)明:為何不直接調(diào)用接口獲取數(shù)據(jù)呢? 通過(guò)調(diào)試面板會(huì)發(fā)現(xiàn),搜索結(jié)果數(shù)據(jù)不是前后端分離方式返回到web端,而是通過(guò)服務(wù)端渲染之后一起發(fā)送到web端,所以只能對(duì)html解析,獲取到關(guān)鍵字段內(nèi)容。
2.2 解析數(shù)據(jù)
解析html需要使用bs4
庫(kù),使用前請(qǐng)確保已經(jīng)安裝成功: pip install bs4
,查看本地是否已經(jīng)安裝: pip list
,如下圖:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
elements = soup.select('#pl_feedlist_index .card-wrap')
高能總結(jié):1. soup.select選擇器返回的對(duì)象還能繼續(xù)選擇元素,例如上面的elements,
elements.select_one('.card .info #title')
;2. 元素如果使用了class對(duì)應(yīng)選擇器中用.
,id用#
,元素標(biāo)簽直接用標(biāo)簽名稱(chēng),例如div
、span
、ul
等等。
三.批量保存數(shù)據(jù)
數(shù)據(jù)保存使用pandas,因此需要先安裝: pip install pandas
,解析道的數(shù)據(jù)單行保存讀寫(xiě)文件太費(fèi)時(shí)間,使用pandas批量保存,用法如下:
import pandas as pd
list = [
{
"keywords":"",
...
"like":"",
},{
"keywords":"",
...
"like":"",
}
]
df = pd.DataFrame(list)
df.to_csv('result.csv', index=False, columns=["keywords", "nickname", "publish_time", "device_info", "weibo_content", "forward", "comment", "like"])
高能總結(jié):1. df.to_csv保存數(shù)據(jù)時(shí),如果不存在
result.csv
文件會(huì)自動(dòng)創(chuàng)建;2.往已經(jīng)存在數(shù)據(jù)的result.csv文件中追加數(shù)據(jù),使用追加方式:df.to_csv('result.csv', index=False, mode='a', header=False)
pandas保存檢查完整代碼:
import pandas as pd
import os
class DataTool:
def __init__(self):
self.file_path = 'result.csv'
def check_data(self):
if os.path.exists(self.file_path):
with open(self.file_path, 'r') as file:
first_line = file.readline()
if first_line.strip():
return True
else:
return False
else:
return False
def data_to_save(self, list, page):
df = pd.DataFrame(list)
print("數(shù)據(jù)保存中...")
if page == 1:
has_file = self.check_data()
if not has_file:
df.to_csv(self.file_path, index=False, columns=["keywords", "nickname", "publish_time", "device_info", "weibo_content", "forward", "comment", "like"])
return
df.to_csv(self.file_path, index=False, mode='a', header=False)
下面是pandas庫(kù)的優(yōu)點(diǎn)總結(jié):
Pandas 是一個(gè)強(qiáng)大的數(shù)據(jù)處理和分析庫(kù),它在數(shù)據(jù)科學(xué)和數(shù)據(jù)分析領(lǐng)域非常受歡迎。以下是一些 Pandas 庫(kù)的主要優(yōu)點(diǎn):
1.數(shù)據(jù)結(jié)構(gòu):Pandas 提供了兩個(gè)主要的數(shù)據(jù)結(jié)構(gòu),DataFrame 和 Series,它們使數(shù)據(jù)的處理和分析變得更加容易。DataFrame 是一個(gè)二維表格,類(lèi)似于關(guān)系型數(shù)據(jù)庫(kù)表,而 Series 是一個(gè)一維數(shù)組,類(lèi)似于列表或數(shù)組。這兩種數(shù)據(jù)結(jié)構(gòu)使得處理不同類(lèi)型的數(shù)據(jù)變得更加方便。
2.數(shù)據(jù)清洗:Pandas 提供了豐富的數(shù)據(jù)清洗工具,包括處理缺失值、重復(fù)值、異常值等的功能。你可以輕松地對(duì)數(shù)據(jù)進(jìn)行清洗、填充缺失值、刪除重復(fù)行等操作。
3.靈活的數(shù)據(jù)操作:Pandas 允許你進(jìn)行各種靈活的數(shù)據(jù)操作,包括篩選、過(guò)濾、排序、合并、重塑和透視表等。這使得數(shù)據(jù)分析更加容易,你可以按照需要對(duì)數(shù)據(jù)進(jìn)行各種操作,而不需要編寫(xiě)復(fù)雜的循環(huán)和邏輯。
4.數(shù)據(jù)分組和聚合:Pandas 提供了強(qiáng)大的分組和聚合功能,允許你根據(jù)一個(gè)或多個(gè)列對(duì)數(shù)據(jù)進(jìn)行分組,并應(yīng)用聚合函數(shù)(如求和、平均值、計(jì)數(shù)等)來(lái)匯總數(shù)據(jù)。這對(duì)于生成統(tǒng)計(jì)信息和匯總報(bào)告非常有用。
5.時(shí)間序列處理:Pandas 支持時(shí)間序列數(shù)據(jù)的處理和分析,包括日期和時(shí)間的解析、重采樣、滾動(dòng)窗口計(jì)算等。這對(duì)于金融分析、天氣數(shù)據(jù)、股票市場(chǎng)分析等領(lǐng)域非常有用。
6.豐富的數(shù)據(jù)輸入/輸出:Pandas 支持多種數(shù)據(jù)格式的讀寫(xiě),包括 CSV、Excel、SQL 數(shù)據(jù)庫(kù)、JSON、HTML、Parquet 等,使得數(shù)據(jù)的導(dǎo)入和導(dǎo)出非常方便。
7.集成性:Pandas 可以與其他數(shù)據(jù)科學(xué)庫(kù)(如 NumPy、Matplotlib、Scikit-Learn)無(wú)縫集成,使得數(shù)據(jù)分析和建模工作更加流暢。
四.運(yùn)行過(guò)程
五.項(xiàng)目說(shuō)明文檔
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-782455.html
六.獲取完整源碼
愛(ài)學(xué)習(xí)的小伙伴,本次案例的完整源碼,已上傳微信公眾號(hào)“一個(gè)努力奔跑的snail”,后臺(tái)回復(fù) 微博關(guān)鍵詞 即可獲取。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-782455.html
到了這里,關(guān)于【爬蟲(chóng)實(shí)戰(zhàn)】用python爬取微博任意關(guān)鍵詞搜索結(jié)果、exe文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!