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


這里爬取的目標為jiandan網上的用戶分享的隨手拍的圖片,鏈接為:http://jandan.net/ooxx

首先,經分析后發現該板塊的圖片是異步加載的,通過requests庫難以獲取。因此,利用selenium動態獲取目標內容的源代碼,再用BeautifulSoup庫解析保存即可。

1、首先打開目標鏈接,煎蛋分析下網站,然后決定用什么方式去獲取內容

 

禁止加載JavaScript后,圖片則無法顯示,並且在XHR里面沒有任何內容

基於此,我們發現,該板塊內容只有圖片是異步加載 的,但圖片又是我們想要爬取的,這時用requests庫去獲取內容的話會比較困難,因此,我們可以用selenium庫來獲取目標內容。

 

2.selenium簡單入門

1)什么是selenium

Selenium 是一個用於瀏覽器自動化測試的框架,可以用來爬取任何網頁上看到的數據。

2)selenium的下載和安裝

在終端輸入pip install selenium ——> 下載Chromdriver,解壓后放在…\Google\Chrome\Application\ ——> 將該目錄添加至環境變量

3)使用代碼測試

from selenium import webdriver #導入包
 driver = webdriver.Chrome()  #打開Chrome瀏覽器
driver.get('http://www.baidu.com')  #輸入url,打開百度首頁

如上所示,這段代碼可以自動打開百度首頁,說明OK

 

 3、開始爬取圖片

 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后,可以看到,圖片爬取成功:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM