-
一、背景介紹
- 1.1 爬取目標(biāo)
- 1.2 演示視頻
- 1.3 軟件說(shuō)明
-
二、代碼講解
- 2.1 爬蟲采集模塊
- 2.2 軟件界面模塊
- 2.3 日志模塊
- 三、獲取源碼及軟件
一、背景介紹
1.1 爬取目標(biāo)
您好!我是@馬哥python說(shuō),一名10年程序猿。
我用python開發(fā)了一個(gè)爬蟲采集軟件,可自動(dòng)按關(guān)鍵詞抓取抖音視頻數(shù)據(jù)。
為什么有了源碼還開發(fā)界面軟件呢?方便不懂編程代碼的小白用戶使用,無(wú)需安裝python,無(wú)需改代碼,雙擊打開即用!
軟件界面截圖:
爬取結(jié)果截圖:
結(jié)果截圖1:
結(jié)果截圖2:
結(jié)果截圖3:
以上。
1.2 演示視頻
軟件使用演示:
【軟件演示】抖音搜索采集工具,支持多個(gè)關(guān)鍵詞、排序方式、發(fā)布時(shí)間等
1.3 軟件說(shuō)明
幾點(diǎn)重要說(shuō)明:
- Windows用戶可直接雙擊打開使用,無(wú)需Python運(yùn)行環(huán)境,非常方便!
- 需要填入個(gè)人cookie和目標(biāo)視頻鏈接
- 支持篩選:排序方式(綜合排序/最新發(fā)布/最多點(diǎn)贊)和發(fā)布時(shí)間(不限/一天內(nèi)/一周內(nèi)/半年內(nèi))
- 支持同時(shí)爬多個(gè)關(guān)鍵詞
- 爬取過(guò)程中,有l(wèi)og文件詳細(xì)記錄運(yùn)行過(guò)程,方便回溯
- 爬取完成后,自動(dòng)導(dǎo)出結(jié)果到csv文件
- 可爬13個(gè)字段,含:關(guān)鍵詞,頁(yè)碼,視頻標(biāo)題,視頻鏈接,作者昵稱,抖音號(hào),作者鏈接,作者粉絲數(shù),發(fā)布時(shí)間,點(diǎn)贊數(shù),評(píng)論數(shù),收藏?cái)?shù),轉(zhuǎn)發(fā)數(shù)。
以上。
二、代碼講解
2.1 爬蟲采集模塊
首先,定義接口地址作為請(qǐng)求地址:
# 請(qǐng)求地址
url = 'https://www.douyin.com/aweme/v1/web/search/item/'
定義一個(gè)請(qǐng)求頭,用于偽造瀏覽器:
# 請(qǐng)求頭
h1 = {
"Accept": 'application/json, text/plain, */*',
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Cookie": self.cookie_val,
"Referer": "",
"Sec-Ch-Ua": 'Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120',
"Sec-Ch-Ua-Mobile": "?0",
"Sec-Ch-Ua-Platform": "Windows",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
說(shuō)明一下,cookie是個(gè)關(guān)鍵參數(shù)。
cookie的獲取方法,如下:
這個(gè)值非常重要,軟件界面需要填寫?。?/p>
加上請(qǐng)求參數(shù),告訴程序你的爬取條件是什么:
# 請(qǐng)求參數(shù)
params = {
"device_platform": "webapp",
"aid": "6383",
"channel": "channel_pc_web",
"search_channel": "aweme_video_web",
"sort_type": self.trans_sort_type(v_str=self.sort_type),
"publish_time": self.trans_time_range(v_str=self.time_range),
"keyword": search_keyword,
"search_source": "tab_search",
"query_correct_type": "1",
"is_filter_search": "1",
"from_group_id": "",
"offset": cursor,
"count": "20",
"pc_client_type": "1",
"version_code": "170400",
"version_name": "17.4.0",
"cookie_enabled": "true",
"screen_width": "1536",
"screen_height": "864",
"browser_language": "zh-CN",
"browser_platform": "Win32",
"browser_name": "Chrome",
"browser_version": "120.0.0.0",
"browser_online": "true",
"engine_name": "Blink",
"engine_version": "120.0.0.0",
"os_name": "Windows",
"os_version": "10",
"cpu_core_num": "8",
"device_memory": "8",
"platform": "PC",
"downlink": "10",
"effective_type": "4g",
"round_trip_time": "50",
"webid": "7249265465250973217",
"msToken": "Sx2PzLIz0YGvM_wrIkaUaaeUb1JUutgo3ERiWmwV1w6VC1naW15lFM6N3nanMZRZYfaHLvXrDNzGqkAyvvCpdO3d6u0u_kNmmZZHeMIsDqga2eWnjTzp5g==",
"X-Bogus": "DFSzswVuketAN9oEt7PfdSlls7YT"
}
下面就是發(fā)送請(qǐng)求和接收數(shù)據(jù):
# 發(fā)送請(qǐng)求
r = requests.get(url, headers=h1, params=params)
print(r.status_code)
# 以json格式接收返回?cái)?shù)據(jù)
json_data = r.json()
定義一些空列表,用于存放解析后字段數(shù)據(jù):
# 定義空列表
title_list = [] # 視頻標(biāo)題
link_list = [] # 視頻鏈接
author_name_list = [] # 作者昵稱
author_id_list = [] # 抖音號(hào)
author_link_list = [] # 作者鏈接
follower_count_list = [] # 作者粉絲數(shù)
create_time_list = [] # 發(fā)布時(shí)間
like_count_list = [] # 點(diǎn)贊數(shù)
comment_count_list = [] # 評(píng)論數(shù)
collect_count_list = [] # 收藏?cái)?shù)
share_count_list = [] # 轉(zhuǎn)發(fā)數(shù)
循環(huán)解析字段數(shù)據(jù),以"視頻標(biāo)題"為例:
for v in video_list:
# 視頻標(biāo)題
title = v['aweme_info']['desc']
self.tk_show('視頻標(biāo)題:' + title)
title_list.append(title)
其他字段同理,不再贅述。
最后,是把數(shù)據(jù)保存到csv文件:
# 保存數(shù)據(jù)到DF
df = pd.DataFrame(
{
'關(guān)鍵詞': search_keyword,
'頁(yè)碼': page,
'視頻標(biāo)題': title_list,
'視頻鏈接': link_list,
'作者昵稱': author_name_list,
'抖音號(hào)': author_id_list,
'作者鏈接': author_link_list,
'作者粉絲數(shù)': follower_count_list,
'發(fā)布時(shí)間': create_time_list,
'點(diǎn)贊數(shù)': like_count_list,
'評(píng)論數(shù)': comment_count_list,
'收藏?cái)?shù)': collect_count_list,
'轉(zhuǎn)發(fā)數(shù)': share_count_list,
}
)
if os.path.exists(self.result_file): # 如果文件存在,不再設(shè)置表頭
header = False
else: # 否則,設(shè)置csv文件表頭
header = True
df.to_csv(self.result_file, mode='a+', index=False, header=header, encoding='utf_8_sig')
self.tk_show('保存csv文件成功:' + self.result_file)
完整代碼中,還含有:判斷循環(huán)結(jié)束條件、排序方式(綜合排序/最新發(fā)布/最多點(diǎn)贊)、發(fā)布時(shí)間(不限/一天內(nèi)/一周內(nèi)/半年內(nèi))等關(guān)鍵實(shí)現(xiàn)邏輯。
2.2 軟件界面模塊
主窗口部分:
# 創(chuàng)建主窗口
root = tk.Tk()
root.title('抖音搜索采集軟件v1.1 | 馬哥python說(shuō) |')
# 設(shè)置窗口大小
root.minsize(width=850, height=650)
輸入控件部分:
# 搜索關(guān)鍵詞
tk.Label(root, justify='left', text='搜索關(guān)鍵詞:').place(x=30, y=160)
entry_kw = tk.Text(root, bg='#ffffff', width=60, height=2, )
entry_kw.place(x=125, y=160, anchor='nw') # 擺放位置
底部版權(quán)部分:
# 版權(quán)信息
copyright = tk.Label(root, text='@馬哥python說(shuō) All rights reserved.', font=('仿宋', 10), fg='grey')
copyright.place(x=290, y=625)
以上。
2.3 日志模塊
好的日志功能,方便軟件運(yùn)行出問(wèn)題后快速定位原因,修復(fù)bug。
核心代碼:
def get_logger(self):
self.logger = logging.getLogger(__name__)
# 日志格式
formatter = '[%(asctime)s-%(filename)s][%(funcName)s-%(lineno)d]--%(message)s'
# 日志級(jí)別
self.logger.setLevel(logging.DEBUG)
# 控制臺(tái)日志
sh = logging.StreamHandler()
log_formatter = logging.Formatter(formatter, datefmt='%Y-%m-%d %H:%M:%S')
# info日志文件名
info_file_name = time.strftime("%Y-%m-%d") + '.log'
# 將其保存到特定目錄,ap方法就是尋找項(xiàng)目根目錄,該方法博主前期已經(jīng)寫好。
case_dir = r'./logs/'
info_handler = TimedRotatingFileHandler(filename=case_dir + info_file_name,
when='MIDNIGHT',
interval=1,
backupCount=7,
encoding='utf-8')
日志文件截圖:
以上。
三、獲取源碼及軟件
完整python源碼及exe軟件,微信公眾號(hào)"老男孩的平凡之路"后臺(tái)回復(fù)"爬抖音搜索軟件"即可獲取。點(diǎn)擊直達(dá)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-785502.html
推薦閱讀:【GUI界面軟件】抖音評(píng)論采集:自動(dòng)采集10000多條,含二級(jí)評(píng)論、展開評(píng)論!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-785502.html
到了這里,關(guān)于【GUI軟件】抖音搜索結(jié)果批量采集,支持多個(gè)關(guān)鍵詞、排序方式、發(fā)布時(shí)間篩選等!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!