使用Python+selenium 视频及相关数据
該程序的功能是從用戶的主頁中爬取視頻鏈接、點贊數、評論數等信息。程序使用Selenium和BeautifulSoup庫模擬滾動并提取頁面的HTML源代碼。然后,使用正則表達式從HTML源代碼中提取所需的信息。最后,將提取的信息存儲在Pandas DataFrame中,并將其保存為CSV文件。
程序開始等待20秒鐘,以允許用戶登錄其帳戶。然后,它通過執行JavaScript命令來模擬滾動,并等待頁面完全加載。然后提取HTML源代碼并關閉ChromeDriver。然后,程序提取用戶的名稱并創建一個名為用戶名稱的目錄(如果目錄不存在)。
程序然后從HTML源代碼中提取視頻鏈接,并對每個視頻鏈接進行迭代。對于每個視頻鏈接,程序使用正則表達式提取視頻的標題、點贊數、評論數和其他信息。然后將此信息存儲在Pandas DataFrame中,并將其保存為CSV文件。
完整代碼:
```python import driver as driver import requests # 數據請求模塊 import os import re import pandas as pd import json import time from pprint import pprint from selenium import webdriver import random from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC# 地址 url = input("請輸入用戶主頁鏈接:")#偽裝成瀏覽器 headers = {'cookie': "********省略*********",'user-agent': "********省略************" }# 初始化ChromeDriver service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=service)# 打開網頁 driver.get(url)# 最大化瀏覽器 driver.maximize_window()time.sleep(20) # 等待15秒登陸賬號# 模擬滾動 for i in range(30):driver.execute_script('window.scrollBy(0,10000)')time.sleep(random.randint(1,3))# 等待網頁加載完成 wait = WebDriverWait(driver, 10) wait.until(EC.presence_of_element_located((By.TAG_NAME, 'body')))# 獲取網頁源代碼 response = driver.execute_script('return document.documentElement.outerHTML') #print(response)# 關閉ChromeDriver driver.quit()#response = requests.get(url=url, headers=headers) zhang_hao=re.findall('<span class="Nu66P_ba"><span><span><span><span>(.+?)</span></span></span></span></span></span>', response)[0] # 打印網頁源代碼zhang_hao_list=[] Dian_zan_list=[] Ping_lun_list=[] Shou_cang_list=[] Fabu_shijian_list=[] Tittle_list=[] lis_list=[]if not os.path.exists(zhang_hao):os.makedirs(zhang_hao)lis = re.findall(r'<a href="/video/(\d+)', response) lis = list(set(lis))for li in lis :print('https://www.douyin.com/video/'+li) print(f"該用戶共有{len(lis)}條視頻")for li in lis :url2='https://www.douyin.com/video/'+lilis_list.append(url2)response_video = requests.get(url=url2, headers=headers)# 使用正則表達式匹配 抓取發布時間 點贊 評論 收藏try:Fabu_shijian=re.findall('</span></div><span class="aQoncqRg">發布時間:<!-- -->(.+?)</span>',response_video.text)[0]except:Fabu_shijian=''try:title = re.findall('<title data-react-helmet="true">(.*)?</title>', response_video.text)[0]except:title = liprint(title)match = re.findall('<span class="CE7XkkTw">(.+?)</span>', response_video.text)try:Dian_zan=match[0]except:Dian_zan=''try:Ping_lun=match[1]except:Ping_lun=''try:Shou_cang=match[2]except:Shou_cang=''zhang_hao_list.append(zhang_hao)Fabu_shijian_list.append(Fabu_shijian)Tittle_list.append(title)Dian_zan_list.append(Dian_zan)Ping_lun_list.append(Ping_lun)Shou_cang_list.append(Shou_cang)Douyin_df = pd.DataFrame(columns = ['賬號名','視頻鏈接','標題','點贊數','評論數','收藏','發布時間']) Douyin_df['賬號名']=zhang_hao_list Douyin_df['視頻鏈接']=lis_list Douyin_df['標題']=Tittle_list Douyin_df['點贊數']=Dian_zan_list Douyin_df['評論數']=Ping_lun_list Douyin_df['收藏']=Shou_cang_list Douyin_df['發布時間']=Fabu_shijian_listcurrent_path = os.getcwd() Douyin_df.to_csv(current_path+'/'+str(zhang_hao_list[0])+'.csv',index=False,encoding='utf-8-sig')#視頻下載模塊(比較慢) '''i=0 for li in lis:#獲取視頻網頁url_video = 'https://www.douyin.com/video/' + liresponse_video = requests.get(url=url_video, headers=headers)#print(response_video.text)try:title = re.findall('<title data-react-helmet="true">(.*)?</title>', response_video.text)[0]except:title = lihtmldata=re.findall('<script id="RENDER_DATA" type="application/json">(.*?)</script',response_video.text)#解碼if len(htmldata) > 0:htmldata = requests.utils.unquote(htmldata[0])else:# Handle the case when htmldata is empty# You can print an error message or skip the current iterationprint("Error: htmldata is empty")continuejson_data=json.loads(htmldata)video_url1="https:"+json_data['44']['aweme']['detail']['video']['bitRateList'][0]['playAddr'][0]['src']video_content = requests.get(url=video_url1, headers=headers).contentwith open(zhang_hao+'/'+str(title)+'.mp4', 'wb') as f:f.write(video_content)i+= 1print(f"完成第{i}個視頻")'''要運行此程序,需要在計算機上安裝 Google Chrome 瀏覽器。 此外,需要安裝 ChromeDriver 可執行文件并將其添加到系統的 PATH 環境變量中。 您需要安裝的 ChromeDriver 版本取決于您安裝的 Google Chrome 版本。
您可以從以下鏈接下載相應版本的 ChromeDriver:[https://sites.google.com/a/chromium.org/chromedriver/downloads]
下載相應版本的 ChromeDriver 后,您可以按照操作系統的說明將其添加到系統的 PATH 環境變量中。
例如,在 Windows 上,您可以通過在命令提示符下運行以下命令,將包含 ChromeDriver 可執行文件的目錄添加到您的 PATH 中:
setx PATH “%PATH%;C:\path\to\chromedriver\directory”
或者將驅動程序至于python安裝目錄 script文件夾下
運行截圖
免責聲明
本程序僅供教育和研究目的使用。禁止將本程序用于任何其他目的。本程序的作者不對使用本程序造成的任何損害或法律問題負責。用戶承擔使用本程序所帶來的所有責任和風險。使用本程序即表示用戶同意這些條款和條件。
總結
以上是生活随笔為你收集整理的使用Python+selenium 视频及相关数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dsadas
- 下一篇: 遥想大肠包小肠----python装饰器