網(wǎng)站展示型推廣北京網(wǎng)絡(luò)推廣有哪些公司
文章目錄
- 一、背景介紹
- 二、代碼講解
- 2.1 爬蟲
- 2.2 tkinter界面
- 2.3 存日志
- 三、軟件演示視頻
- 四、說明
一、背景介紹
你好,我是@馬哥python說,一名10年程序猿。
最近我用python開發(fā)了一個GUI桌面軟件,目的是爬取相關(guān)YouTube博主的各種信息,字段包括:
視頻標(biāo)題、視頻鏈接、博主名稱、博主鏈接、國家、telegram鏈接、whatsapp鏈接、twitter鏈接、facebook鏈接、instagram鏈接。
以近期某熱門事件為例。
演示視頻:
用python爬YouTube博主,并開發(fā)成GUI桌面軟件
運行截圖:
爬取數(shù)據(jù)截圖:
實現(xiàn)思路:
通過按指定關(guān)鍵詞搜索視頻,通過視頻進入博主的主頁簡介,爬取博主的各種聯(lián)系信息。
并把源碼封裝成exe文件,方便沒有python環(huán)境,或者不懂技術(shù)的人使用它。
二、代碼講解
2.1 爬蟲
本爬蟲是通過selenium模擬手工搜索的過程,所以需要提前安裝好chrome瀏覽器和chromedriver驅(qū)動。
安裝chrome瀏覽器和chromedriver驅(qū)動的過程,請自行解決,不再贅述。
把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(['視頻標(biāo)題', '視頻鏈接', '博主名稱', '博主鏈接', '國家', '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 = urlif "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 = urlif "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 = urlif "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 = urlif "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界面
界面部分代碼:
# 創(chuàng)建主窗口
root = tk.Tk()
root.title('YouTube爬蟲-定制化開發(fā) | 馬哥python說')
# 設(shè)置窗口大小
root.minsize(width=850, height=650)show_list_Frame = tk.Frame(width=800, height=450) # 創(chuàng)建<消息列表分區(qū)>
show_list_Frame.pack_propagate(0)
show_list_Frame.place(x=30, y=120, anchor='nw') # 擺放位置# 滾動條
scroll = tk.Scrollbar(show_list_Frame)
# 放到Y(jié)軸豎直方向
scroll.pack(side=tk.RIGHT, fill=tk.Y)
2.3 存日志
軟件運行過程中,會在同級目錄下生成logs文件夾,文件夾內(nèi)會出現(xiàn)log文件,記錄下軟件在整個運行過程中的日志,方便長時間運行、無人值守,出現(xiàn)問題后的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方法就是尋找項目根目錄,該方法博主前期已經(jīng)寫好。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爬YouTube博主信息,并開發(fā)成GUI桌面軟件!
四、說明
附完整源碼:【GUI開發(fā)】用python爬YouTube博主信息,并開發(fā)成exe軟件!
我是 @馬哥python說,持續(xù)分享python源碼干貨中!
推薦閱讀:【爬蟲GUI】YouTube評論采集軟件,突破反爬,可無限爬取!