前言:
許多網友貢獻了不少的爬取妹子圖片,豆瓣電影的教程,開始學爬蟲的時候也少不了參考各位大佬的代碼和填坑的經驗!這次打算原創出一個爬取國外比較大的圖片網站Pixabay
之所以選擇該網站
- 第一:Pixabay可在任何地方使用的免費正版圖片和視頻,Pixabay是一個充滿活力的創意社區,Pixabay圖片可以安全的使用,而無需爲創作者署名!(這個非常的棒,不用擔心版權等問題)
- 第二:資源豐富,便於爬取大量數據儲備學習。
Pixabay:https://pixabay.com/zh/
那麼下面開始我們的教程吧!
1.安裝 Phantomjs
首先pyspider的安裝就不過多贅述了,爲了更好的爬取大部分網站含js的頁面,我們需要選擇phantomjs 這個工具包
- 使用 PhantomJS 渲染帶 JS 的頁面
- 有一些頁面,它實在太複雜了,無論是分析 API 請求的地址,還是渲染時進行了加密,讓直接抓取請求非常麻煩。這時候就是 PhantomJS 大顯身手的時候了
在使用 PhantomJS 之前,你需要安裝它(安裝文檔)。當你安裝了之後,在運行 all 模式的 pyspider 時就會自動啓用了。當然,你也可以在 demo.pyspider.org 上嘗試。
sudo apt-get install phantomjs
phantomjs --version
若顯示當前版本號,則 Phantomjs 安裝成功。
2.使用 PhantomJS
當 pyspider 連上 PhantomJS 代理後,你就能通過在 self.crawl 中添加 fetch_type='js’的參數,開啓使用 PhantomJS 抓取。
根據以上步驟就ok!
3.運行程序
以下是全部的pyspider代碼:
from pyspider.libs.base_handler import *
class Handler(BaseHandler):
crawl_config = {
}
def __init__(self):
self.base_url = 'https://pixabay.com/zh/images/search/?pagi='
self.page_num = 1
self.total_num = 30
@every(minutes=24 * 60)
def on_start(self):
while self.page_num <= self.total_num:
url = self.base_url + str(self.page_num)
print (url)
self.crawl(url, callback=self.index_page,fetch_type = 'js')
self.page_num += 1
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
for each in response.doc('a[href^="https://pixabay.com/zh/photos/%"]').items():
self.crawl(each.attr.href, callback=self.detail_page ,fetch_type = 'js' )
@config(priority=2)
def detail_page(self, response):
return {
#"url": response.url,
"title": response.doc('h1').text(),
"img":response.doc('div > img ').attr('src')
}
然後設置running,然後點擊run 跑起來:
最後可以通過result查看爬取的數據,圖片的標題和url: