我需要獲得新聞,然後tts,在每天上班的路上可以聽一下。具體的方案後期我也會做一次分享。先看我喜歡的萬能的老路:獲得html內容-> python的工具庫解析,獲得元素中的內容,完成。 好家伙,我知道我爬取失敗了。一堆js代碼,看得我煩。我一去看頁面發現:原來新聞的獲得是走的介面,然後js插入文檔的 ...
我需要獲得新聞,然後tts,在每天上班的路上可以聽一下。具體的方案後期我也會做一次分享。先看我喜歡的萬能的老路:獲得html內容-> python的工具庫解析,獲得元素中的內容,完成。
好家伙,我知道我爬取失敗了。一堆js代碼,看得我煩。我一去看頁面發現:原來新聞的獲得是走的介面,然後js插入文檔的,於是啃介面。
又被難住了!介面的pageCallback是什麼,感覺我的經驗,這個是複雜的js加密之後的,因為沒有帶這個參數,可以輕易的通過介面獲得想要的數據。
假如沒有這個參數,我其實可以為所欲為了。所以,分析pageCallback這個參數的加密非常耗時間了。也不打算研究,我決定換一種方式去研究。
拿出我的終極大招:Selenium。模擬用戶的操作,該不會攔截我吧。
爬蟲2.0
使用Selenium模擬用戶爬取頁面內容,並輸出成文件。關於Selenium是什麼,歡迎看這篇文章:selenium Python教程。在這裡,我只講我主要的實現。
首先作為一款工具腳本,我們應該不喜歡視窗界面吧,除非你需要動態的觀察程式的操作。所以,我開啟了無頭瀏覽器模式。
# 無頭瀏覽器 chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') driver = webdriver.Chrome(options=chrome_options)
關鍵的driver拿到之後,剩下的過程就簡單了。和一般的requests、spider爬蟲一樣,需要獲得頁面的代碼,然後解析對應的元素,拿到屬性或者文本。
# titles title_elems = driver.find_elements(by=By.CLASS_NAME, value="item-title") titles = [title_elem.text for title_elem in title_elems]
是不是很神奇,看到了By.CLASS_NAME,是不是一下子聯想到了CSS了。是的,你的預感足夠的正確。如果以上的內容帶給你足夠的震撼和驚奇,請繼續往下看,
# 所有的更新時間 related_elems = driver.find_elements(by=By.CSS_SELECTOR, value="div.item-related > span.time") relateds = [related_elem.text for related_elem in related_elems] # 所有的描述信息 desc_elems = driver.find_elements(by=By.CSS_SELECTOR, value="div.item-desc > span") # 需要去除新聞摘要結尾的()內容 descs = [desc_item.text[:desc_item.text.rfind('(')] for desc_item in desc_elems]
沒錯,"div.item-related > span.time"這個是什麼選擇起來著?後代選擇器。nice,CSS的選擇器它都支持。
來個小插曲:你知道的CSS選擇器有哪些?
- 元素選擇器 p div
- 類選擇器 .highlight
- ID選擇器 #id
- 屬性選擇器 [type=‘text’]
- 後代選擇器 ul li
- 子元素選擇器 ul > li
- 相鄰兄弟選擇器 h2+p
- 通用選擇器 *
不要覺得我是多餘的了,其實這些選擇器會了,基本上在頁面的爬取上就是無敵了。另外,selenium還有這幾種選擇器:
class By: """Set of supported locator strategies.""" # Python學習交流q裙:708525271 ID = "id" XPATH = "xpath" LINK_TEXT = "link text" PARTIAL_LINK_TEXT = "partial link text" NAME = "name" TAG_NAME = "tag name" CLASS_NAME = "class name" CSS_SELECTOR = "css selector"
常用的還是XPATH TAD_NAME CLASS_NAME CSS_SELECTOR 大家感興趣的話可以自行的研究。
最後插一句話哈,作為後端的開發人員,我很希望我的介面、網站是可以正常訪問的,給用戶提供穩定的服務。但是,爬蟲的話,對網站的危害很大的,特別是電腦的運行速度要比人快很多倍,相當於一下子加重了伺服器的負擔,類似於DOS攻擊了。一旦爬蟲劫持了流量,其它的用戶就不能正常的訪問了。
所以,在後端的介面設計上一般採取的是限流,但是也會降低用戶的使用體驗。所以,適當的學習學習就可以啦。也得守住法律的底線,話說:“python是包四餐的學科”。
好了文章分享就到這結束了,對於想把爬蟲學好,或者想學了去接單就業的小伙伴,我還給大家準備了這些資料。
1、Python基礎入門教程
萬丈高樓平地起,基礎學好了,後面學習其它方向才會穩穩噹噹,所以給大家準備了Python基礎的詳細教程 。
2、Python爬蟲實戰
爬蟲是接單需求最多,學習起來也比較快的方向之一。
所以給大家準備了爬文本+爬數據+爬音樂+爬視頻+ 爬圖片+爬音頻+網站驗證碼 +搶購等教程,視頻和源碼我都打好了,直接上面最後一段代碼里自取。
好了,文章到這裡真的結束 ,咱們下次再見!