家好,我是Python進階者。
前幾天在Python鉆石交流群【夢】問了一個Python網絡爬蟲的問題,這個網站不知道使用了什么反爬手段,都獲取不到頁面數據。原來的那篇文章竟然爆文了,突破了1.5w的閱讀量,歡迎大家圍觀。
不過這里粉絲的需求有點奇怪,他不需要JS加載后的數據頁面,而是需要JS的源網頁。昨天在群里又討論起這個問題,這次一起來看看這個問題。
這里【瑜亮老師】指出異步頁面中,標簽和數據都是不在頁面源碼中的。你的這個頁面,數據在json,然后js拼裝后顯示在頁面中。如果你想要獲取你說的帶標簽的源碼,可以使用自動化模塊,例如:selenium(不建議用這個),playwright,drissionpage。
后來【提請問粘給圖截報錯貼代源碼】給出了具體的源碼:
from DrissionPage import WebPage
page = WebPage()
# 訪問網頁并渲染
page.get('https://fx.cmbchina.com/hq', timeout=300)
response = page.html
print(response)
page.quit()
打開network,查看這個網頁的渲染方式,你就知道這個網頁一開始是沒有內容的,全靠js在渲染。
你直接訪問這個鏈接就是沒有內容。
先渲染再獲取就有了,再者說,你的目的肯定是只要這頁面上的表格,表格就是json,獲取json鏈接比獲取渲染后的網頁方便多了。可以不在頁面本身的,使用dom插入,現在的數據頁面基本都是這種方式,效率高且安全性好。
【貓藥師Kelly】也指出使用drissionpage,配合自帶的監聽或者mitmproxy,能搞定很多活。
順利地解決了粉絲的問題。
如果你也有類似這種Python相關的小問題,歡迎隨時來交流群學習交流哦,有問必答!
大家好,我是Python進階者。這篇文章主要盤點了一個Python網絡爬蟲網頁JS渲染源網頁源碼獲取的問題,文中針對該問題,給出了具體的解析和代碼實現,幫助粉絲順利解決了問題。
最后感謝粉絲【夢】提出的問題,感謝【論草莓如何成為凍干莓】、【瑜亮老師】、【貓藥師Kelly】給出的思路,感謝【莫生氣】等人參與學習交流。
【提問補充】溫馨提示,大家在群里提問的時候。可以注意下面幾點:如果涉及到大文件數據,可以數據脫敏后,發點demo數據來(小文件的意思),然后貼點代碼(可以復制的那種),記得發報錯截圖(截全)。代碼不多的話,直接發代碼文字即可,代碼超過50行這樣的話,發個.py文件就行。
關于雪球兄,大家應該都熟悉了,之前他寫過Python實戰文章,好評如潮,沒來得及看的小伙伴,可以戳這里了:
盤點常用驗證碼標注和識別項目線上部署三種方式——VUE前端、Java后端和Python后端部署
Python項目實戰篇——常用驗證碼標注&識別(CNN神經網絡模型訓練/測試/部署)
Python項目實戰篇——常用驗證碼標注&識別(前端+后端實現高效率數據標注)
Python項目實戰篇——常用驗證碼標注&識別(數據采集/預處理/字符圖切割)
Python項目實戰篇——常用驗證碼標注和識別(需求分析和實現思路)
之前也有給大家分享B站的一些文章,感興趣的話可以看看這個文章,Python網絡爬蟲+數據分析:手把手教你用Python網絡爬蟲獲取B站UP主10萬條數據并用Pandas庫進行趣味數據分析。
一提到B站,第一印象就是視頻,相信很多小伙伴和我一樣,都想著去利用網絡爬蟲技術獲取B站的視頻吧,但是B站視頻其實沒有那么好拿到的,關于B站的視頻獲取,之前有介紹通過you-get庫進行實現,感興趣的小伙伴可以看這篇文章:You-Get 就是這么強勢!。
言歸正傳,經常在B站上學習的小伙伴們可能經常會遇到有的博主連載幾十個,甚至幾百個視頻,尤其像這種編程語言、課程、工具使用等連續的教程,就會出現選集系列,如下圖所示。
當然這些選集的字段我們肉眼也是可以看得到的。只是通過程序來實現的話,可能真沒有想象的那么簡單。那么這篇文章的目標呢,就是通過Python網絡爬蟲技術,基于selenium庫,實現視頻選集的獲取。
這篇文章我們用的庫是selenium,這個是一個用于模擬用戶登錄的庫,雖然給人的感覺是慢,但是在網絡爬蟲領域,這個庫還是用的蠻多的,用它來模擬登錄、獲取數據屢試不爽。下面是實現視頻選集采集的所有代碼,歡迎大家親自動手實踐。
# coding: utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
class Item:
page_num = ""
part = ""
duration = ""
def __init__(self, page_num, part, duration):
self.page_num = page_num
self.part = part
self.duration = duration
def get_second(self):
str_list = self.duration.split(":")
sum = 0
for i, item in enumerate(str_list):
sum += pow(60, len(str_list) - i - 1) * int(item)
return sum
def get_bilili_page_items(url):
options = webdriver.ChromeOptions()
options.add_argument('--headless') # 設置無界面
options.add_experimental_option('excludeSwitches', ['enable-automation'])
# options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2,
# "profile.managed_default_content_settings.flash": 0})
browser = webdriver.Chrome(options=options)
# browser = webdriver.PhantomJS()
print("正在打開網頁...")
browser.get(url)
print("等待網頁響應...")
# 需要等一下,直到頁面加載完成
wait = WebDriverWait(browser, 10)
wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@class="list-box"]/li/a')))
print("正在獲取網頁數據...")
list = browser.find_elements_by_xpath('//*[@class="list-box"]/li')
# print(list)
itemList = []
second_sum = 0
# 2.循環遍歷出每一條搜索結果的標題
for t in list:
# print("t text:",t.text)
element = t.find_element_by_tag_name('a')
# print("a text:",element.text)
arr = element.text.split('\n')
print(" ".join(arr))
item = Item(arr[0], arr[1], arr[2])
second_sum += item.get_second()
itemList.append(item)
print("總數量:", len(itemList))
# browser.page_source
print("總時長/分鐘:", round(second_sum / 60, 2))
print("總時長/小時:", round(second_sum / 3600.0, 2))
browser.close()
return itemList
get_bilili_page_items("https://www.bilibili.com/video/BV1Eb411u7Fw")
這里用到的選擇器是xpath,利用視頻示例是B站的《高等數學》同濟版 全程教學視頻(宋浩老師)視頻選集,大家如果想抓取其他視頻選集的話,只需要更改上述代碼的最后一行的URL鏈接即可。
在運行過程中小伙伴們應該會經常遇到這個問題,如下圖所示。
這個是因為谷歌驅動版本問題導致的,只需要根據提示,去下載對應的驅動版本即可,驅動下載鏈接:
https://chromedriver.storage.googleapis.com/index.html
我是Python進階者。這篇文章主要給大家介紹了B站視頻選集內容的獲取方法,基于網絡爬蟲,通過selenium庫和xpath選擇器進行實現,并且給大家例舉了常見問題的處理方法。小伙伴們,快快用實踐一下吧!如果在學習過程中,有遇到任何問題,歡迎加我好友,我拉你進Python學習交流群共同探討學習。
么是文章采集代碼
網頁文章采集碼,是一款利用獨特編程技巧的高效網頁采集器。它僅需編寫特定指令,便能快速獲取互聯網上的大量文本與圖像資料,猶如人工逐頁篩選。此外,該技術在信息檢索以及數據分析等領域亦產生了顯著影響。
在信息化時代,如何有效地獲取有價值的信息成為至關重要的問題。傳統的人工檢索耗時且效果有限,復制粘貼的方式顯然已經無法滿足需求。而文章采集代碼具有顯著提升信息收集效率及準確性的優點,因此已逐漸成為學術研究、數據分析及企業市場推廣領域必不可少的工具。
文章采集代碼的原理
本程序具有卓越的編寫理念,主要包括以下四個核心環節:
關鍵技術在于軟件借助HTTP協議,直接獲取指定站點的頁面原始數據。
剖析網頁源碼:對于搜集到的文檔,深度解讀其中的HTML格式與相關數據結構。
我們已經摒棄了提取出來的信息中無用的部分,包括HTML標識和特殊字符等,以揭示其真正的核心價值。
數據存儲策略:經過精細篩選與加工后的數據,將按照秩序存入數據庫或檔案文件,為將來深入分析以及可視化展出提供支持。
我們來詳細研究影響數據精度和完整性的重要因素,包括反爬蟲措施的應對,以及解決動態加載等復雜難題的有效方法。只有深入理解原理并結合實踐經驗做出精準策略調整,才能創建出優質且穩定運行的文章采集軟件代碼。
常見的文章采集工具
數字化浪潮日益加速,促使眾多文本采集工具應運而生,為提升開發者工作效能立下汗馬功勞。此篇特推薦幾款表現優異且功能強大的中期優秀采集工具以供參考:
強力推薦Beautiful Soup:作為Python編程中杰出的HTML處理利器,助力您迅速提取HTML和XML文檔中的關鍵信息。
Scrapy:這是Python開發的開源網絡爬蟲框架,其出色的實用性和廣泛應用領域彰顯了其優異品質。
Selenium:專攻網絡應用測試領域,尤為擅長仿真用戶操作行為。
根據不同環境合理選用工具,以滿足多元化需求;用戶需明確自我需求,并在科學評估技術水準的基礎上作出適宜選擇。
文章采集代碼在實際應用中的挑戰
盡管文章采集代碼具備高效便捷的優點,但在實踐操作過程中仍需面臨諸多困難。主要挑戰包括以下幾點:
以應對惡意爬蟲為例,為了規避網站遭到非法訪問并確保數據安全性,許多網站已實施高效的反爬蟲策略。因此,在文章代碼編寫時,務必避免觸發此類防范措施。
如今眾多企業均利用JavaScript實現在線實時數據加載,為進一步提高此類網頁信息獲取效率,推薦采用諸如Selenium等自動化測試工具進行模擬操控。
隨著信息和網頁編輯形式多樣化(例如HTML、JSON、XML等格式),數據處理的復雜性急劇增加。
在眾多挑戰下,開發者必須深化技能,以探索滿足項目個性需求的最優方案。
未來文章采集技術發展趨勢
在現今大數據和科技迅猛發展的環境下,文章采編技術正逐步展現出如下關鍵趨勢。
隨著AI科技的飛速發展,文章采集工作正逐步運用先進的算法與技術。如面向網頁結構解析的機器學習技術,能有效地自動識別并提取關鍵信息。
多元化趨勢日益明顯:隨著互聯網及移動設備的廣泛應用,各種視聽類媒體呈現出快速創新之勢。在未來的信息收集及展示環節中,深度加工及精密分析將倍受關注。
關注隱私保護提高警惕:鑒于當下社會隱私意識不斷提升,在收集和利用用戶自創內容時,必須堅決尊重其隱私權。
展望未來,文章采集技術將逐步向智能性增強、多元性拓展并注重用戶體驗與隱私保護的趨勢邁進。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。