pyspider爬取免费正版图片网站Pixabay
前言:
许多网友贡献了不少的爬取妹子图片,豆瓣电影的教程,开始学爬虫的时候也少不了参考各位大佬的代码和填坑的经验!这次打算原创出一个爬取国外比较大的图片网站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: