目錄
- 一、背景介紹
- 二、代碼講解
- 2.1 爬蟲
- 2.2 tkinter界面
- 2.3 存日志
- 三、說明
一、背景介紹
你好,我是@馬哥python說,一名10年程式猿,
最近我用python開發了一個GUI桌面軟體,目的是爬取相關YouTube博主的各種資訊,欄位包括:
視頻標題、視頻鏈接、博主名稱、博主鏈接、國家、telegram鏈接、whatsapp鏈接、twitter鏈接、facebook鏈接、instagram鏈接,
以近期某熱門事件為例,
演示視頻:
【爬蟲演示】用python爬YouTube博主資訊,并開發成GUI桌面軟體!
運行截圖:

爬取資料截圖:

實作思路:
通過按指定關鍵詞搜索視頻,通過視頻進入博主的主頁簡介,爬取博主的各種聯系資訊,
并把原始碼封裝成exe檔案,方便沒有python環境,或者不懂技術的人使用它,
二、代碼講解
2.1 爬蟲
本爬蟲是通過selenium模擬手工搜索的程序,所以需要提前安裝好chrome瀏覽器和chromedriver驅動,
安裝chrome瀏覽器和chromedriver驅動的程序,請自行解決,不再贅述,
把chromedriver放到exe檔案的旁邊(同級目錄下)即可,
展示部分核心代碼:
初始化csv檔案:
def init(self):
with open(f'{self.query}.csv', 'a', newline='', encoding='utf_8_sig') as f:
writer = csv.writer(f)
writer.writerow(['視頻標題', '視頻鏈接', '博主名稱', '博主鏈接', '國家', 'telegram鏈接', 'whatsapp鏈接', 'twitter鏈接', 'facebook鏈接', 'instagram鏈接'])
爬博主資訊:
# 先決議出所有鏈接
contact_url_els = self.browser.find_elements(By.XPATH, '//*[@id="link-list-container"]/a')
for j in contact_url_els:
url = j.get_attribute('href')
if "t.me" in url: # 電報鏈接
de_url = unquote(url)
de_url_dict = parse_qs(urlparse(de_url).query)
url = de_url_dict.get("q")[0]
telegram_url = url
if "wa.link" in url or "api.whatsapp.com" in url: # whatsapp鏈接
de_url = unquote(url)
de_url_dict = parse_qs(urlparse(de_url).query)
url = de_url_dict.get("q")[0]
whatsapp_url = url
if "twitter.com" in url: # twitter鏈接
de_url = unquote(url)
de_url_dict = parse_qs(urlparse(de_url).query)
url = de_url_dict.get("q")[0]
twitter_url = url
if "facebook.com" in url: # facebook鏈接
de_url = unquote(url)
de_url_dict = parse_qs(urlparse(de_url).query)
url = de_url_dict.get("q")[0]
facebook_url = url
if "instagram.com" in url: # instagram鏈接
de_url = unquote(url)
de_url_dict = parse_qs(urlparse(de_url).query)
url = de_url_dict.get("q")[0]
instagram_url = url
2.2 tkinter界面
界面部分代碼:
# 創建主視窗
root = tk.Tk()
root.title('YouTube爬蟲-定制化開發 | 馬哥python說')
# 設定視窗大小
root.minsize(width=850, height=650)
show_list_Frame = tk.Frame(width=800, height=450) # 創建<訊息串列磁區>
show_list_Frame.pack_propagate(0)
show_list_Frame.place(x=30, y=120, anchor='nw') # 擺放位置
# 滾動條
scroll = tk.Scrollbar(show_list_Frame)
# 放到Y軸豎直方向
scroll.pack(side=tk.RIGHT, fill=tk.Y)
2.3 存日志
軟體運行程序中,會在同級目錄下生成logs檔案夾,檔案夾內會出現log檔案,記錄下軟體在整個運行程序中的日志,方便長時間運行、無人值守,出現問題后的debug,
部分代碼:
class Log_week():
def get_logger(self):
self.logger = logging.getLogger(__name__)
# 日志格式
formatter = '[%(asctime)s-%(filename)s][%(funcName)s-%(lineno)d]--%(message)s'
# 日志級別
self.logger.setLevel(logging.DEBUG)
# 控制臺日志
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方法就是尋找專案根目錄,該方法博主前期已經寫好,
case_dir = r'./logs/'
info_handler = TimedRotatingFileHandler(filename=case_dir + info_file_name,
when='MIDNIGHT',
interval=1,
backupCount=7,
encoding='utf-8')
self.logger.addHandler(sh)
sh.setFormatter(log_formatter)
self.logger.addHandler(info_handler)
info_handler.setFormatter(log_formatter)
return self.logger
三、說明
我是 @馬哥python說,持續分享python原始碼干貨!
推薦閱讀: 【爬蟲+情感判定+Top10高頻詞+詞云圖】"烏克蘭"油管熱評python輿情分析
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/525106.html
標籤:其他
