爬取某網站圖片

這裏爬取的目標爲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、開始爬取圖片

# 導入必要的包
from selenium import webdriver
from bs4 import BeautifulSoup
import requests

# 打開谷歌瀏覽器
driver = webdriver.Chrome()
# 輸入url,打開煎蛋網首頁
driver.get('http://jandan.net')
# 初始化一個引用計數,用於後面的圖片簡單命名
index = 1

# 定義爬蟲方法
def getImage(link_texts):
    # 將index置爲全局變量
    global index
    # 通過點擊的動作執行翻頁
    for i in link_texts:
        # 模擬點擊
        driver.find_element_by_link_text(i).click()
        # 解析網頁
        html = BeautifulSoup(driver.page_source, 'html.parser')
        # 獲取原圖的url鏈接
        links = html.find_all('a', {'class': 'view_img_link'})
        # 遍歷當頁獲得的所有原圖鏈接
        for link in links:
            # 將原圖存至當前目錄下的jdimg 文件夾,以index命名,後綴名爲圖片原名的後三位,即jpg或者gif
            with open('jdimg/{}.{}'.format(index, link.get('href')[len(link.get('href'))-3: len(link.get('href'))]), 'wb') as jpg:
                jpg.write(requests.get("http:" + link.get('href')).content)
            print("正在爬取第%s張圖片" % index)
            index += 1
# 定義主函數     
def main():
    # 將準備執行的瀏覽或翻頁動作的關鍵字存入數組
    link_texts = [u'隨手拍', u'下一頁', u'下一頁', u'下一頁', u'下一頁']
    #開始爬取
    getImage(link_texts)

main()

 

執行後:

 

 打開文件夾jdimg後,可以看到,圖片爬取成功:

https://www.cnblogs.com/m-chen/p/10136958.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章