爬蟲實戰系列(一):爬取某網站圖片

這裏爬取的目標爲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後,能夠看到,圖片爬取成功:

相關文章
相關標籤/搜索