pyspider爬取免费正版图片网站Pixabay


前言:

许多网友贡献了不少的爬取妹子图片,豆瓣电影的教程,开始学爬虫的时候也少不了参考各位大佬的代码和填坑的经验!这次打算原创出一个爬取国外比较大的图片网站Pixabay
之所以选择该网站

  • 第一:Pixabay可在任何地方使用的免费正版图片和视频,Pixabay是一个充满活力的创意社区,Pixabay图片可以安全的使用,而无需为创作者署名!(这个非常的棒,不用担心版权等问题)
  • 第二:资源丰富,便于爬取大量数据储备学习。

Pixabayhttps://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:
在这里插入图片描述


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