文章目錄
- 一、背景故事
- 二、說干就干
- 2.1、python熟知的scrapy爬蟲框架,使用起來真的很棒、很不錯!!!
- 2.2、那么通過F12瀏覽器除錯工具,可以使用介面來爬取資料嗎?結果大失所望!!!
- 2.3、既然作者是枚測驗人員,那么UI自動化測驗中的selenium工具,是不是可以用呢?
- 三、使用selenium來爬取某音的視頻資料
- 四、總結
一、背景故事
那會兒,作者正在...冥想,微信突然彈出前領導的訊息,頓時心里有點小激動,以為是要拉兄弟一把,升職加薪!!!
結果一看,嗯,原來是個活兒,發來一個視頻,類似爬蟲的桌面應用,從某音爬取資料,并找到對應評論的某人私信!
可以是說是批量給視頻評論的人私信推銷產品,如果他們找過來,然后完成交易,達成轉化!問我實作的成本有多大?
二、說干就干
- 第一點,對于爬蟲這類事情,作者是即開心又緊張,心理總有些小興奮<牢飯怎么樣?>,
騙人的!!!
其實腦海里面立即給出多個解決方案:使用什么技術呢?怎樣才能更出色的做好呢?
- 方案<即將安出>
2.1、python熟知的scrapy爬蟲框架,使用起來真的很棒、很不錯!!!
但是作者是個測驗工程師,不是爬蟲工程師,爬蟲只是偶爾的興趣愛好!!!
重點是作者僅僅粗略自學過一段scrapy框架,現在要用起來還得從零開始,
2.2、那么通過F12瀏覽器除錯工具,可以使用介面來爬取資料嗎?結果大失所望!!!
因為直接requests.get(url)請求會提示錯誤,并沒有資料回傳,
仔細一看發現請求引數中有個加密引數,所以每次瀏覽器請求都會不一樣,如果不知道規則,也就無法通過這種方式爬資料,
2.3、既然作者是枚測驗人員,那么UI自動化測驗中的selenium工具,是不是可以用呢?
是的,辦法總比困難多,再不濟,連介面請求都能拿來做爬蟲呢,
三、使用selenium來爬取某音的視頻資料
- 前提條件:使用者必須有python基礎及xpath語法且有自動化思想
# 準備python+selenium環境;下載對應chrome瀏覽器的版本驅動;先準備一個demo測驗一下,是否能正常使用!
from selenium import webdriver
driver=webdriver.Chrome(executable_path="../chromedriver.exe")
driver.implicitly_wait(30)
driver.maximize_window()
driver.get("http://www.baidu.com")
# do somethings
driver.quit()
- 如果是目標明確,直接在瀏覽器中打開官網,搜索關鍵字得到url<如下代碼演示>
'''
Created on 2021年7月22日
@author: qguan
'''
import re
from time import sleep
from selenium import webdriver
# 初始化驅動物件
driver=webdriver.Chrome(executable_path="../chromedriver.exe")
driver.implicitly_wait(30)
driver.maximize_window()
# 打開目標網址
url="https://www.xxxxyin.com/search/%E4%B8%8A%E6%B5%B7%E6%95%B4%E5%9E%8B"
driver.get(url)
# 可能是反扒的原因,有拼圖驗證
sleep(5) # 這里手動,用于測驗
# 可以使用影像處理,處理滑塊驗證
# 最后當然是使用無頭模式
# 獲取當前句柄,后面頁面切換使用
# handler=driver.current_window_handle
# 獲取當前結果頁的所有元素集
video_pic=driver.find_elements_by_xpath("//div[@style='display: block;']/ul/li/div/a[1]")
# 計數器
i=1
for video in video_pic:
# 遍歷點擊元素
video.click()
# 獲取瀏覽器所有句柄
handlers=driver.window_handles
# 切換最新的那一個
driver.switch_to_window(handlers[-1])
# 獲取跳轉頁面元素:標題、點贊、評論、發布時間、用戶名
titles=driver.find_elements_by_xpath("//div/div[2]/div[1]/div[1]/div[1]/div[2]/h1/span[2]/span/span/span/span")
if len(titles)>0:
title=""
for tit in titles:
title+=tit.text
else:
title="沒有獲取到完整的title"
praise=driver.find_element_by_xpath("//div/div[2]/div[1]/div[1]/div[1]/div[2]/div/div[1]/div[1]/span").text
comment=driver.find_element_by_xpath("//div/div[2]/div[1]/div[1]/div[1]/div[2]/div/div[1]/div[2]/span").text
open_time=driver.find_element_by_xpath("//div/div[2]/div[1]/div[1]/div[1]/div[2]/div/div[2]/span").text
# 視頻作者名稱
username=driver.find_element_by_xpath("//div/div[2]/div[1]/div[2]/div/div[1]/div[2]/a/div/span/span/span/span/span")
# 點擊用戶名跳轉用戶詳情頁
username.click()
# 獲取當前頁的url地址后,就關閉當前頁面
c_url=driver.current_url
driver.close() # 為什么關閉不了
param_url=c_url.split("?")[1] # 拆分url地址?拼接的引數
# 正則匹配,提取用戶視頻id、用戶id
author_id=re.findall("(\d{11})",param_url)[0]
group_id=re.findall(r"(\d{19})",param_url)[0]
# 控制臺輸出結果
print("第{}條,視頻title:{},作品id:{},用戶id:{},評論數:{},點贊數:{},發布時間:{}".format(i,title,group_id,author_id,comment,praise,open_time))
# 切換第一頁
driver.switch_to_window(handlers[0])
i+=1 # 計數器加1
# 退出driver驅動
driver.quit()
- 將結果輸出在控制臺,爬取關鍵資訊如下:
和領導發過來視頻的操作的資料基本匹配
四、總結
- 從工具易用(完整)性來講爬蟲,selenium工具不如scrapy框架,主要體現在scrapy方便資料庫操作,功能更直接,
學習selenium工具成本更大:需要熟知元素定位方案,還需要解決更多ui層的問題;
連資料庫建表都需要親力親為;可能還需要搭配其他框架來解決某些特定場景的問題,
- 從功能實作上來說,只要能快速解決問題的工具就是好工具,專業的工具做專業的事情,歡迎讀者更多交流,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/294723.html
標籤:python

