1. 前言大家好,我是安果! 今天再推薦一款小眾輕量級(jí)的爬蟲庫:MechanicalSoup MechanicalSoup,也是一款爬蟲神器!它使用純 Python 開發(fā),底層基于 Beautiful Soup 和 Requests,實(shí)現(xiàn)網(wǎng)頁自動(dòng)化及數(shù)據(jù)爬取 項(xiàng)目地址: https://github.com/MechanicalSoup/MechanicalSoup 2. 安裝及常見用法首先安裝依賴庫 # 安裝依賴庫 常見操作如下: 2-1 實(shí)例化瀏覽器對(duì)象 使用 mechanicalsoup 內(nèi)置的 StatefulBrowser() 方法可以實(shí)例化一個(gè)瀏覽器對(duì)象 import mechanicalsoup PS:實(shí)例化的同時(shí),參數(shù)可以執(zhí)行 User Agent 及數(shù)據(jù)解析器,默認(rèn)解析器為 lxml 2-2 打開網(wǎng)站及返回值 使用瀏覽器實(shí)例對(duì)象的 open(url) 即可以打開一個(gè)網(wǎng)頁,返回值類型為:requests.models.Response # 打開一個(gè)網(wǎng)站 通過返回值可以發(fā)現(xiàn),使用瀏覽器對(duì)象打開網(wǎng)站相當(dāng)于使用 requests 庫對(duì)網(wǎng)站進(jìn)行了一次請(qǐng)求 2-3 網(wǎng)頁元素及當(dāng)前 URL 使用瀏覽器對(duì)象的「url」屬性可以獲取當(dāng)前頁面的 URL 地址;瀏覽器的「 page 」屬性用于獲取頁面的所有網(wǎng)頁元素內(nèi)容 由于 MechanicalSoup 底層基于 BS4,因此 BS4 的語法都適用于 MechanicalSoup # 當(dāng)前網(wǎng)頁URL地址 2-4 表單操作 瀏覽器對(duì)象內(nèi)置的 select_form(selector) 方法用于獲取當(dāng)前頁面的 Form 表單元素 如果當(dāng)前網(wǎng)頁只有一個(gè) Form 表單,則參數(shù)可以省略 # 獲取當(dāng)前網(wǎng)頁中某個(gè)表單元素 form.print_summary() 用于將表單內(nèi)全部元素打印出來 form = browser.select_form() 至于表單內(nèi)的 input 普通輸入框、單選框 radio、復(fù)選框 checkbox # 1、普通輸入框 瀏覽器對(duì)象的 submit_selected(btnName) 方法用于提交表單 需要注意的是,提交表單后的返回值類型為:requests.models.Response # 提交表單(模擬單擊“提交”按鈕) 2-5 調(diào)試?yán)?/span> 瀏覽器對(duì)象 browser 提供了一個(gè)方法:launch_browser() 用于啟動(dòng)一個(gè)真實(shí)的 Web 瀏覽器,可視化展示當(dāng)前網(wǎng)頁的狀態(tài),在自動(dòng)化操作過程中非常直觀有用 PS:它不會(huì)真實(shí)打開網(wǎng)頁,而是創(chuàng)建一個(gè)包含頁面內(nèi)容的臨時(shí)頁面,并將瀏覽器指向這個(gè)文件 更多功能可以參考: https://mechanicalsoup./en/stable/tutorial.html 3. 實(shí)戰(zhàn)一下我們以「 微信文章搜索,爬取文章標(biāo)題及鏈接地址 」為例 3-1 打開目標(biāo)網(wǎng)站,并指定隨機(jī) UA 由于很多網(wǎng)站對(duì) User Agent 做了反爬,因此這里隨機(jī)生成了一個(gè) UA,并設(shè)置進(jìn)去 PS:從 MechanicalSoup 源碼會(huì)發(fā)現(xiàn),UA 相當(dāng)于設(shè)置到 Requests 的請(qǐng)求頭中 import mechanicalsoup 3-2 表單提交,搜索一次 使用瀏覽器對(duì)象獲取網(wǎng)頁中的表單元素,然后給表單中的 input 輸入框設(shè)置值,最后模擬表單提交 # 獲取表單元素 3-3 數(shù)據(jù)爬取 數(shù)據(jù)爬取的部分很簡單,語法與 BS4 類似,這里就不展示說明了 search_results = browser.get_current_page().select('.news-list li .txt-box') 3-4 反反爬 MechanicalSoup 除了設(shè)置 UA,還可以通過瀏覽器對(duì)象的「 session.proxies 」設(shè)置代理 IP # 代理ip 4. 最后 |
|