這裏爬取的目標爲jiandan網上的用戶分享的隨手拍的圖片,連接爲:http://jandan.net/ooxxhtml
首先,經分析後發現該板塊的圖片是異步加載的,經過requests庫難以獲取。所以,利用selenium動態獲取目標內容的源代碼,再用BeautifulSoup庫解析保存便可。web
一、首先打開目標連接,煎蛋分析下網站,而後決定用什麼方式去獲取內容數組
禁止加載JavaScript後,圖片則沒法顯示,而且在XHR裏面沒有任何內容瀏覽器
基於此,咱們發現,該板塊內容只有圖片是異步加載 的,但圖片又是咱們想要爬取的,這時用requests庫去獲取內容的話會比較困難,所以,咱們能夠用selenium庫來獲取目標內容。框架
2.selenium簡單入門異步
1)什麼是selenium函數
Selenium 是一個用於瀏覽器自動化測試的框架,能夠用來爬取任何網頁上看到的數據。測試
2)selenium的下載和安裝網站
在終端輸入pip install selenium ——> 下載Chromdriver,解壓後放在…\Google\Chrome\Application\ ——> 將該目錄添加至環境變量url
3)使用代碼測試
from selenium import webdriver #導入包
driver = webdriver.Chrome() #打開Chrome瀏覽器
driver.get('http://www.baidu.com') #輸入url,打開百度首頁
如上所示,這段代碼能夠自動打開百度首頁,說明OK
三、開始爬取圖片
1 # 導入必要的包
2 from selenium import webdriver 3 from bs4 import BeautifulSoup 4 import requests 5
6 # 打開谷歌瀏覽器
7 driver = webdriver.Chrome() 8 # 輸入url,打開煎蛋網首頁
9 driver.get('http://jandan.net') 10 # 初始化一個引用計數,用於後面的圖片簡單命名
11 index = 1
12
13 # 定義爬蟲方法
14 def getImage(link_texts): 15 # 將index置爲全局變量
16 global index 17 # 經過點擊的動做執行翻頁
18 for i in link_texts: 19 # 模擬點擊
20 driver.find_element_by_link_text(i).click() 21 # 解析網頁
22 html = BeautifulSoup(driver.page_source, 'html.parser') 23 # 獲取原圖的url連接
24 links = html.find_all('a', {'class': 'view_img_link'}) 25 # 遍歷當頁得到的全部原圖連接
26 for link in links: 27 # 將原圖存至當前目錄下的jdimg 文件夾,以index命名,後綴名爲圖片原名的後三位,即jpg或者gif
28 with open('jdimg/{}.{}'.format(index, link.get('href')[len(link.get('href'))-3: len(link.get('href'))]), 'wb') as jpg: 29 jpg.write(requests.get("http:" + link.get('href')).content) 30 print("正在爬取第%s張圖片" % index) 31 index += 1
32 # 定義主函數
33 def main(): 34 # 將準備執行的瀏覽或翻頁動做的關鍵字存入數組
35 link_texts = [u'隨手拍', u'下一頁', u'下一頁', u'下一頁', u'下一頁'] 36 #開始爬取
37 getImage(link_texts) 38
39 main()
執行後:
打開文件夾jdimg後,能夠看到,圖片爬取成功: