用 Jupyter Notebook 爬取微博圖片保存本地!

文 | 潮汐

來源:Python 技術「ID: pythonall」

今天咱們用 Jupyter-Notebook 並結合框架(Selenium)模擬瀏覽器抓取微博圖片並將圖片保存本地。

Selenium 是一個用電腦模擬人的操作瀏覽器網頁,可以實現自動化測試,模擬瀏覽器抓取數據等工作。

環境部署

安裝 Jupyter notebook

關於 Jupyter notebook 的詳細知識點在以往的文章中有做過詳細的介紹,詳情請參考文章一文喫透 Jupyter notebook

這裏只需要在命令行中輸入:jupyter notebook 啓動跳轉到瀏覽器編輯界面即可。

瀏覽器頁面:

安裝 Selenium

安裝 Selenium 非常簡單,只需要用命令'pip install Selenium' 即可,安裝成功提示信息如下:

下載瀏覽器驅動

下載驅動地址如下:

Firefox 瀏覽器驅動

Chrome 瀏覽器驅動:chromedriver

IE 瀏覽器驅動:IEDriverServer

Edge 瀏覽器驅動:MicrosoftWebDriver

需要把瀏覽器驅動放入系統路徑中,或者直接告知 selenuim 的驅動路徑。

環境都搭建好後就可以直接開始爬取數據了。

抓取微博數據

首先導入包,模擬瀏覽器訪問微博主頁,詳細代碼如下:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://weibo.com/')

此時瀏覽器會打開一個新頁面,如下圖所示:

接下來開始分析頁面數據:微博頁面搜索奧運會關鍵字後出現新的頁面,然後複製網址,抓取和奧運會相關的圖片保存於本地,搜索界面如下:

輸入網址獲取網頁內容:

driver.get('https://s.weibo.com/weibo/%25E5%25A5%25A5%25E8%25BF%2590%25E4%25BC%259A?topnav=1&wvr=6&b=1')
contents = driver.find_elements_by_xpath(r'//p[@class="txt"]')
print(len(contents))

輸出內容如下:

查看網頁詳細信息:

for i in range(0,3):
    print("==============================")
    print(contents[i].get_attribute('innerHTML'))

獲取圖片信息:

contents = driver.find_elements_by_xpath(r'//img[@action-type="fl_pics"]')

print(len(contents))

for i in range(0,20):
    print("==============================")
    print(contents[i].get_attribute('src'))

下載圖片在本地:

import os
import urllib.request

for i in range(0,20):
    print("==============================")
    image_url=contents[i].get_attribute('src')
    file_
    print(image_url,file_name)
    urllib.request.urlretrieve(image_url, filename=file_name)

至此微博頁面關於奧運會的相關圖片已保存於本地,圖片保存詳情如下:

彙總代碼如下

from selenium import webdriver
import urllib.request

driver = webdriver.Chrome()
driver.get('https://weibo.com/')

driver.get('https://s.weibo.com/weibo/%25E5%25A5%25A5%25E8%25BF%2590%25E4%25BC%259A?topnav=1&wvr=6&b=1')

contents = driver.find_elements_by_xpath(r'//p[@class="txt"]')

for i in range(0,3):
    print("==============================")
    print(contents[i].get_attribute('innerHTML'))

contents = driver.find_elements_by_xpath(r'//img[@action-type="fl_pics"]')

print(len(contents))

for i in range(0,20):
    print("==============================")
    print(contents[i].get_attribute('src'))


for i in range(0,20):
    print("==============================")
    image_url=contents[i].get_attribute('src')
    file_
    print(image_url,file_name)
    urllib.request.urlretrieve(image_url, filename=file_name)

以上彙總代碼給沒有安裝 Jupyter Notebook 的朋友們使用,希望對大家有幫助。

總結

今天的文章主要講解用 Jupyter Notebook 工具和 Selenium 框架抓取微博數據,希望對大家有所幫助。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/zFQYFvGTtpnpuISRs5OO1g