Scrapinghub執行spider抓取並顯示圖片


最近在學習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 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM