最近在学习Scrapy的时候发现一个很有意思的网站,可以托管Spider,也可以设置定时抓取的任务,相当方便。于是研究了一下,把其中比较有意思的功能分享一下:
  • 抓取图片并显示在item里:

下面来正式进入本文的主题,抓取链家成交房产的信息并显示房子图片

1. 创建一个scrapy project:

scrapy startproject lianjia_shub

这时会在当前文件夹下创建如下文件夹:

│  scrapy.cfg

│

└─lianjia_shub

    │  items.py

    │  pipelines.py

    │  settings.py

    │  __init__.py

    │

    └─spiders

            __init__.py

2.  定义item:

import scrapy

class LianjiaShubItem(scrapy.Item):

    id = Field()

    title = Field()

    price = Field()

    addr = Field()

    link = Field()

    # 这里需要注意image这个字段

    # image字段用来存储抓取到的<img>,这样就可以在ScrapingHub的Item Browser里查看图片了

    # 而且这个名字必须是image,不然是不会显示图片的

    image = Field()

3. 创建spider:

cmd里运行以下命令:

scrapy genspider lianjia http://bj.lianjia.com/chengjiao

定义spider:

# -*- coding: utf-8 -*-

import scrapy

from scrapy.spiders.init import InitSpider

from lianjia_shub.items import LianjiaShubItem

class LianjiaSpider(InitSpider):

    name = "lianjia"

    allowed_domains = ["http://bj.lianjia.com/chengjiao/"]

    start_urls = []

    def init_request(self):

        return scrapy.Request('http://bj.lianjia.com/chengjiao/pg1/', callback=self.parse_detail_links)

    def parse_detail_links(self, response):

        house_lis = response.css('.clinch-list li')

        for house_li in house_lis:

            link = house_li.css('.info-panel h2 a::attr("href")').extract_first().encode('utf-8')

            self.start_urls.append(link)

        return self.initialized()

    def parse(self, response):

        house = LianjiaShubItem()

        house['link'] = response.url

        house['id'] = response.url.split('/')[-1].split('.')[0]

        image_url = response.css('.pic-panel img::attr(src)').extract_first()

        # image是一个list。在Scrapinghub中显示的时候会把image里所有的图片显示出来。

        house['image'] = [image_url, image_url]

        house['title'] = response.css('.title-box h1::text').extract_first()

        house['addr'] = response.css('.info-item01 a::text').extract_first()

        house['price'] = response.css('.love-money::text').extract_first()

        return house

4. 下面我们就需要到Scrapinghub(http://scrapinghub.com/platform/)上注册一个账户。

5. 安装Scrapinghub客户端命令Shub:

pip install shub

6.  在Scrapinghub上创建一个project,并找到对应的api key:

api key: 点击账户 -> Account Settings -> API Key

7. 使用api key和project id登录shub:

shub login

手动输入api key之后会创建一个scrapinghub的配置文件scrapinghub.yml:


projects:

  default: lianjia_shub

8. 把spider部署到Scrapinghub:

shub deploy <projectid>

Project ID可以在链接中找到: 
https://dash.scrapinghub.com/p/<projectid>/jobs/

9. 在Scrapinghub上运行spider:

Scrapinghub上的job对应于我们定义的spider:

https://dash.scrapinghub.com/p/<projectid>/spider/lianjia/
点击页面右上角的Run Spider:

在弹出的对话框中选择Spider的优先级后运行。(如果不想等太长时间的话可以设置成 Highest):

10.  执行结束后可以点击items查看抓取到的信息:


What's Next:

1. 根据需要更改spider的配置:

Spiders -> Settings -> Project Settings

2. 设置定时抓取:

Periodic Jobs -> Add periodic job

Scrapinghub执行spider抓取并显示图片的更多相关文章

  1. 使用wget工具抓取网页和图片 成功尝试

    使用wget工具抓取网页和图片 发表于1年前(2014-12-17 11:29)   阅读(2471) | 评论(14) 85人收藏此文章, 我要收藏 赞7 wget 网页抓取 图片抓取 目录[-] ...

  2. 使用wget工具抓取网页和图片 及 相关工具几个

    想保存一些网页,最后找到这 wget 的 shell脚本,虽然不是太理想,亲测可用呢. 使用wget工具抓取网页和图片   来源 https://my.oschina.net/freestyletim ...

  3. Nodejs全站开发学习系列 & 深入浅出Node学习笔记 & Spider抓取

    https://course.tianmaying.com/node 这个系列的文章看起来很不错,值得学习一下. /Users/baidu/Documents/Data/Interview/Web-S ...

  4. python学习-抓取知乎图片

    #!/bin/usr/env python3 __author__ = 'nxz' """ 抓取知乎图片webdriver Chromedriver驱动需要安装,并指定d ...

  5. PHP批量抓取远程网页图片并存到本地实现方法和源码

    做为一个仿站工作者,当遇到网站有版权时甚至加密的时候,WEBZIP也熄火,怎么扣取网页上的图片和背景图片呢.有时候,可能会想到用火狐,这款浏览器好像一个强大的BUG,文章有版权,屏蔽右键,火狐丝毫也不 ...

  6. 【Python爬虫程序】抓取MM131美女图片,并将这些图片下载到本地指定文件夹。

    一.项目名称 抓取MM131美女写真图片,并将这些图片下载到本地指定文件夹. 共有6种类型的美女图片: 性感美女 清纯美眉 美女校花 性感车模 旗袍美女 明星写真 抓取后的效果图如下,每个图集是一个独 ...

  7. 抓取Bing每日图片作为网站首页背景

    把Bing搜索的背景图片设置为自己网站的背景,实现背景及资讯的每日更新 效果图如下: 理一下思路,首先我们要抓取Bing的每日图片及最新资讯,然后保存图片及信息到本地,最后显示图片及资讯到网站首页. ...

  8. Python Spider 抓取猫眼电影TOP100

    """ 抓取猫眼电影TOP100 """ import re import time import requests from bs4 im ...

  9. Python Spider 抓取今日头条街拍美图

    """ 抓取今日头条街拍美图 """ import os import time import requests from hashlib ...

随机推荐

  1. C++ 使用cl命令编辑时发生的问题收录

    1.cl不是内部或这外部命令,也不是可运行的程序或批处理文件. 这个问题的出现的原因是因为系统找不到cl命令处理程序,无法识别,解决办法: 首先在C盘查找cl.exe,可能会查到多个,先选择第一个,将 ...

  2. PHP Warning: phpinfo(): It is not safe to rely on the system's timezone setting

    错误描述: PHP Warning:  phpinfo(): It is not safe to rely on the system's timezone settings. You are *re ...

  3. js给div动态添加控件,然后给这个控件动态添加事件

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...

  4. 关于NGINX变量的一些测试结果

    作为NGINX变量,不像正规语言那么正式. 但处理自定义和内部变量时,这些操作,也是少不了的. geo $dollar { default "$"; } server { list ...

  5. POJ 2986 A Triangle and a Circle

    题意:给定一个三角形,以及一个圆的圆心坐标和半径,求圆和三角形的相交面积. 思路: 用三角剖分,三角形上每个线段都变成这个线段与圆心的三角形,然后算出每个三角形与圆的相交面积,然后根据有向面积的正负累 ...

  6. POJ 3709 K-Anonymous Sequence (单调队列优化)

    题意:给定一个不下降数列,一个K,将数列分成若干段,每段的数字个数不小于K,每段的代价是这段内每个数字减去这段中最小数字之和.求一种分法使得总代价最小? 思路:F[i]表示到i的最小代价.f[i]=m ...

  7. Base64 加密之中文乱码

    ase64编码将二进制数据按照每三个字节转换成四个字节可读字符,编码后的字符长度大约为136.1%.字符范围为 A-Z  a-z  0-9  \  +.但编码后的字符串不太适合使用URL传输,中文加密 ...

  8. [转]ReactJS入门教程

    Refference From:http://www.cocoachina.com/webapp/20150721/12692.html 现在最热门的前端框架有AngularJS.React.Boot ...

  9. JS获取按下的键盘字符

    <html> <head> KeyPress Test!<hr> <script language="javascript"> fu ...

  10. poj 3498 March of the Penguins(最大流+拆点)

    题目大意:在南极生活着一些企鹅,这些企鹅站在一些冰块上,现在要让这些企鹅都跳到同一个冰块上.但是企鹅有最大的跳跃距离,每只企鹅从冰块上跳走时会给冰块造成损害,因此企鹅跳离每个冰块都有次数限制.找出企鹅 ...