貓哥教你寫爬蟲 043--模擬瀏覽器

複習

1559409852719
1559409868117

在爬蟲過程當中,咱們還可能會遇到各類各樣棘手的問題

有的網站登陸很複雜,驗證碼難以破解,好比大名鼎鼎的12306。

1559409922867

有的網站頁面交互複雜,所使用的技術難以被爬取,好比,騰訊文檔。

1559409951050

還有的網站,對URL的加密邏輯很複雜

不用擔憂,有了終極武器——selenium,經過它,能夠解決以上全部問題

selenium是什麼呢?它是一個強大的Python庫。

它能夠作什麼呢?

它能夠用幾行代碼,控制瀏覽器,作出自動打開輸入點擊等操做,就像是真正的用戶在操做同樣

當你遇到驗證碼很複雜的網站時,selenium容許讓人去手動輸入驗證碼,而後把剩下的操做交給機器

對於那些交互複雜、加密複雜的網站,selenium問題簡化,爬動態網頁如爬靜態網頁同樣簡單

1559410133835
1559410160329

因爲要真實地運行本地瀏覽器,打開瀏覽器以及等待網頁渲染完成須要一些時間,

selenium的工做不可避免地犧牲了速度和更多資源,不過,至少不會比人慢

安裝

pip install selenium
複製代碼

selenium的腳本能夠控制全部常見瀏覽器的操做,在使用以前,須要安裝瀏覽器的驅動

Windows系統安裝方法:

下載對應chrome版本的驅動

npm.taobao.org/mirrors/chr…

查看chrome版本

1559410607709
1559410651420
1559410680457

將下載好的chromedriver_win32.zip解壓後是一個exe文件,

將其複製到你的Python安裝根目錄下就行了。

1559410765540
1559411246615

selenium所解析提取的,是Elements中的全部數據, 無論是否ajax

凡是瀏覽器中能看到的, selenium都能獲取到

label = driver.find_element_by_tag_name('label') # 解析網頁並提取第一個<lable>標籤中的文字
複製代碼

1559411993128
1559412614141
1559412821049

find_element_by_BeautifulSoup中的find相似,能夠提取出網頁中第一個符合要求的元素;

既然BeautifulSoup有提取全部元素的方法find_allselenium也一樣有方法。

1559412898179

還有一種解決方案,那就是,使用selenium獲取網頁,而後交給BeautifulSoup解析和提取。

回顧一下BeautifulSoup的工做方式吧

1559412987959

BeautifulSoup須要把字符串格式的網頁源代碼解析爲BeautifulSoup對象,而後再從中提取數據

selenium恰好能夠獲取到渲染完整的網頁源代碼

如何獲取呢?也是使用driver的一個方法:page_source

HTML源代碼字符串 = driver.page_source
複製代碼

獲取【你好,蜘蛛俠!】的網頁源代碼

localprod.pandateacher.com/python-manu…

1559443400398

# 本地Chrome瀏覽器設置方法
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://localprod.pandateacher.com/python-manuscript/hello-spiderman/')  # 訪問頁面
time.sleep(2)  # 等待2秒
pageSource = driver.page_source
print(type(pageSource))
print(pageSource)
driver.close()
複製代碼

使用requests獲取的是response對象, 須要調用text()方法, 才能獲取字符串

使用selenium獲取到的網頁源代碼,自己已是字符串了

1559443482100

獲取"百度一下"

from selenium import webdriver
from bs4 import BeautifulSoup
import time
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
time.sleep(2)
soup = BeautifulSoup(driver.page_source,'html.parser')
# 找到"百度一下"
print(soup.find('input',id='su')['value'])
driver.close() # 關掉瀏覽器
複製代碼

1559611465021

自動操做瀏覽器

.send_keys() 模擬按鍵輸入,自動填寫表單

.click() 點擊元素

需求: bing一下 "誰是這個世界上最帥的演員"

from selenium import webdriver
from bs4 import BeautifulSoup
import time
driver = webdriver.Chrome()
driver.get('https://cn.bing.com/')
time.sleep(2)
# 往搜索框裏輸入"誰是這個世界上最帥的演員"
driver.find_element_by_id('sb_form_q').send_keys('誰是這個世界上最帥的演員')
# 點擊"百度一下"
driver.find_element_by_id('sb_form_go').click()
# driver.close() # 關掉瀏覽器
複製代碼

1559612031057
1559443909730

css選擇器

1559570116874

實戰: 登陸掘金, 發表評論

1559576186220
1559576242064

登陸後, 就能夠發表評論了

from selenium import webdriver
import time
driver = webdriver.Chrome()
# 打開網頁
driver.get('https://juejin.im/post/5cf495e96fb9a07ef5622025')
time.sleep(2)
# 聚焦輸入框, 彈出登陸框
js = ''' document.querySelector('#comment-box > div.comment-form.comment-form > div.form-box > div > div > div').click() '''
driver.execute_script(js)
time.sleep(1)
# 輸入用戶名和密碼
driver.find_element_by_css_selector('#juejin > div.global-component-box > div.auth-modal-box > form > div.panel > div.input-group > div:nth-child(1) > input').send_keys('18538280340')
driver.find_element_by_css_selector('#juejin > div.global-component-box > div.auth-modal-box > form > div.panel > div.input-group > div:nth-child(2) > input').send_keys('yunhepython')
# 單擊登陸
driver.find_element_by_css_selector('#juejin > div.global-component-box > div.auth-modal-box > form > div.panel > button').click()
time.sleep(2)
# 點擊輸入框
js = ''' document.querySelector('#comment-box > div.comment-form.comment-form > div.form-box > div > div > div').click(); '''
driver.execute_script(js)
# 寫評論
driver.find_element_by_css_selector('#comment-box > div.comment-form.comment-form.focused > div.form-box > div.input-box > div > div').send_keys('乾貨滿滿...')
# 提交評論
driver.find_element_by_css_selector('#comment-box > div.comment-form.comment-form.focused > div.form-box > div.action-box > div.submit > button').click()
複製代碼

總結

使用selenium獲取數據的方法:.get('URL')

1559445529961
1559445550528
1559445585083

中文文檔: selenium-python-zh.readthedocs.io/en/latest/

英文文檔: seleniumhq.github.io/selenium/do…

小做業: 使用爬蟲, 下載網易雲音樂

網易雲播放鏈接

http://music.163.com/song/media/outer/url?id=這裏填歌曲id.mp3

代碼執行效果...

C:\Users\Administrator\Desktop\demo>python -u "c:\Users\Administrator\Desktop\小白selenium爬取網易雲音樂\musicList.py"
請輸入您在網易雲想聽的歌曲: 水手
DevTools listening on ws://127.0.0.1:55067/devtools/browser/83140ac0-30e3-4a3c-b93a-d61cbb173f5a
1: 水手 - 鄭智化
2: 水手 - 鄭智化
3: 水手 - 鄭智化
4: 水手公園 - GALA
5: 水手(Live) - 鄭智化
6: 水手(Cover:鄭智化) - 陳洲宏
7: 水手 - 迪克牛仔
8: 水手公園 + 陽光彩虹小白馬 (Live) - (原唱:GALA/大張偉) - 何屹繁/鈕楊聖軒/哲野/潤羿///
9: 水手 - 張澤禹/胡鈺佳
10: 水手 - 陳進
11: 水手 - 張瑋瑋和郭龍
12: 水手 - 羣星
13: 水手 - 洪一平
14: 水手公園 - GALA
15: 大力水手主題曲 - Various Artists
16: 水手 - 動力火車
17: 水手 - 迪克牛仔
18: 水手 - Caesar L
19: 水手 - 羣星
20: 水手有點怕水(Hydrophobic Salior) - MT1990
21: セーラー服と機関銃 - (電影 水手服與機關槍:畢業 主題曲 / 映畫『セーラー服と機関銃 ‐卒業‐』主題歌) - 橋本環奈
22: 水手 - 張偉哲
23: 水手 - 陳秋霞
24: 鄭智化-水手 (DJ阿福 Remix)(DJ阿福 (DJ-Afu) remix) - DJ阿福
25: 水手 (Tribute Version) - 複製貓
26: 少女與水手(口琴) - 羣星
27: 小小世界+荷包蛋+說哈羅+山上的孩子+快樂的向前走+哎哎+大力水手+手牽手+哈哈笑+稻草裏的火雞+種樹歌+大象玩皮球+小栗子+下雨+小紅妹妹和小熊+虹彩妹妹+木
瓜+小螳螂+四隻小小鳥+西風的話+哈巴狗+蘭花草+泥娃娃 - 羣星
28: 【局座】水手 - LPY/東林二七
29: セーラー服と機関銃 - 長澤雅美
30: 水手物語 - 陳百強
請輸入您想下載的歌曲序號: 1
水手 - 鄭智化 正在下載...
水手 - 鄭智化 下載完成!!!
C:\Users\Administrator\Desktop\demo>
複製代碼

快速跳轉:

貓哥教你寫爬蟲 000--開篇.md
貓哥教你寫爬蟲 001--print()函數和變量.md
貓哥教你寫爬蟲 002--做業-打印皮卡丘.md
貓哥教你寫爬蟲 003--數據類型轉換.md
貓哥教你寫爬蟲 004--數據類型轉換-小練習.md
貓哥教你寫爬蟲 005--數據類型轉換-小做業.md
貓哥教你寫爬蟲 006--條件判斷和條件嵌套.md
貓哥教你寫爬蟲 007--條件判斷和條件嵌套-小做業.md
貓哥教你寫爬蟲 008--input()函數.md
貓哥教你寫爬蟲 009--input()函數-人工智能小愛同窗.md
貓哥教你寫爬蟲 010--列表,字典,循環.md
貓哥教你寫爬蟲 011--列表,字典,循環-小做業.md
貓哥教你寫爬蟲 012--布爾值和四種語句.md
貓哥教你寫爬蟲 013--布爾值和四種語句-小做業.md
貓哥教你寫爬蟲 014--pk小遊戲.md
貓哥教你寫爬蟲 015--pk小遊戲(全新改版).md
貓哥教你寫爬蟲 016--函數.md
貓哥教你寫爬蟲 017--函數-小做業.md
貓哥教你寫爬蟲 018--debug.md
貓哥教你寫爬蟲 019--debug-做業.md
貓哥教你寫爬蟲 020--類與對象(上).md
貓哥教你寫爬蟲 021--類與對象(上)-做業.md
貓哥教你寫爬蟲 022--類與對象(下).md
貓哥教你寫爬蟲 023--類與對象(下)-做業.md
貓哥教你寫爬蟲 024--編碼&&解碼.md
貓哥教你寫爬蟲 025--編碼&&解碼-小做業.md
貓哥教你寫爬蟲 026--模塊.md
貓哥教你寫爬蟲 027--模塊介紹.md
貓哥教你寫爬蟲 028--模塊介紹-小做業-廣告牌.md
貓哥教你寫爬蟲 029--爬蟲初探-requests.md
貓哥教你寫爬蟲 030--爬蟲初探-requests-做業.md
貓哥教你寫爬蟲 031--爬蟲基礎-html.md
貓哥教你寫爬蟲 032--爬蟲初體驗-BeautifulSoup.md
貓哥教你寫爬蟲 033--爬蟲初體驗-BeautifulSoup-做業.md
貓哥教你寫爬蟲 034--爬蟲-BeautifulSoup實踐.md
貓哥教你寫爬蟲 035--爬蟲-BeautifulSoup實踐-做業-電影top250.md
貓哥教你寫爬蟲 036--爬蟲-BeautifulSoup實踐-做業-電影top250-做業解析.md
貓哥教你寫爬蟲 037--爬蟲-寶寶要聽歌.md
貓哥教你寫爬蟲 038--帶參數請求.md
貓哥教你寫爬蟲 039--存儲數據.md
貓哥教你寫爬蟲 040--存儲數據-做業.md
貓哥教你寫爬蟲 041--模擬登陸-cookie.md
貓哥教你寫爬蟲 042--session的用法.md
貓哥教你寫爬蟲 043--模擬瀏覽器.md
貓哥教你寫爬蟲 044--模擬瀏覽器-做業.md
貓哥教你寫爬蟲 045--協程.md
貓哥教你寫爬蟲 046--協程-實踐-吃什麼不會胖.md
貓哥教你寫爬蟲 047--scrapy框架.md
貓哥教你寫爬蟲 048--爬蟲和反爬蟲.md
貓哥教你寫爬蟲 049--完結撒花.mdcss

相關文章
相關標籤/搜索