用 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