廣西互聯網金融平臺系列-Scrapy爬蟲爬取夠力金融Ajax api數據

1、背景

以前有爬取過樂助貸的api,實際上方式是同樣的。這篇寫夠力金融,其實是由於它的翻頁比樂助貸的翻頁麻煩,因此記錄一下。夠力金融的平臺交易量挺大,數據量也較多,我就不完整爬取了,記錄一下爬蟲的邏輯。css

2、目的

經過接口請求,獲取夠力金融的標的詳細信息及投資人詳細信息html

3、條件

1.標的列表頁是html/css渲染json

2.標的詳情頁的標的數據是html/css渲染api

3.投資人列表是Apidom

4、示例

代碼邏輯記錄一下:scrapy

1.parse方法中將當前列表頁的每條標的連接拿到,並傳給detail進行深刻爬取,已知頁碼能夠在url中循環 就不用翻頁,直接循環取頁碼便可。ide

2.因爲夠力金融的投資記錄頁碼是經過api的total字段顯示投資筆數的,因此parse_nexts中對投資人投資記錄翻頁根據投資記錄條數計算頁碼數量,循環頁碼數 並構造url調用parse_detail進行記錄的爬取。ui

3.parse_detail執行具體的取值操做url

import scrapy
import json
from scrapy.http import Request
from ..items import GljrItemLoader,GljrItem,GljrListItemLoader,GljrListItem
import re


class GljrSpider(scrapy.Spider):
    name = 'gljr'
    allowed_domains = ['www.gljr.com']
    start_urls = ['http://www.gljr.com/invest/index.html?page=1']


    def parse(self, response):
        """
        將當前列表頁的每條標的連接拿到
            並傳給detail進行深刻爬取
            已知頁碼能夠在url中循環  就不用翻頁了
        """
        total = response.css('.invest_bbox .item-list')

        for x in total:
            loaders = GljrItemLoader(item=GljrItem(), response=response)
            loaders.add_value("title", x.css('a.item-tit::text').extract())
            loaders.add_value("amount", x.css('dl.clearfix dd.item-money span::text').extract())
            loaders.add_value("profit", x.css('dl.clearfix .item-yqsy font.item-rates::text').extract())
            loaders.add_value("terms", x.css('dl.clearfix dd:nth-child(5) span::text').extract())
            loaders.add_value("target_urls",  x.css('a.item-tit::attr(href)').extract())
            loaders.add_value("target_urls_id", x.css('a.item-tit::attr(href)').extract())
            loaders.add_value("protype", x.css('a.item-tit::text').extract())
            loaders_item = loaders.load_item()
            yield loaders_item

            """ 獲取url的id,構造api的url傳遞給parse_detail進行投資記錄的抓取 """
            t_url = x.css('a.item-tit::attr(href)').extract_first("")  # 獲取當前url
            matchObj = re.search('\d+',t_url)  # 匹配出數字
            if matchObj:
                bid = matchObj.group(0)
            # 構造api地址  調用parse_nexts獲取投資記錄條數
                yield Request(url='http://www.gljr.com/invest/detailTenderForJson.html?uid=0&borrowid=%s&page=1' %(bid) ,meta={"bid":bid},callback=self.parse_nexts)

        #循環頁碼
        for i in range(2, 560):
            next_pages = "http://www.gljr.com/invest/index.html?page=%s" % (i)
            yield Request(url=next_pages, callback=self.parse)

    def parse_nexts(self, response):
        """
        投資人投資記錄翻頁
            根據投資記錄條數計算頁碼數量
            循環頁碼數 並構造url調用parse_detail進行記錄的爬取
        """
        sites = json.loads(response.body_as_unicode())
        total = sites['data']['page']['total']
        bid = response.meta.get("bid", "")
        if total > 10:
            pages = int(total/10) + 1
            for i in range(1, pages + 1):
                yield Request(
                    url='http://www.gljr.com/invest/detailTenderForJson.html?uid=0&borrowid=%s&page=%s' % (bid, i),
                    meta={"bid": bid}, callback=self.parse_detail)
        else:
            yield Request(url='http://www.gljr.com/invest/detailTenderForJson.html?uid=0&borrowid=%s&page=1' %(bid),meta={"bid":bid},callback=self.parse_detail)

    def parse_detail(self, response):
        """ 根據傳遞進來的投資記錄頁碼api進行投資記錄的抓取 """
        sites = json.loads(response.body_as_unicode())
        target_urls = "https://www.gljr.com/invest/detail.html?borrowid=%s" % (response.meta.get("bid"))
        invest = sites['data']['list']
        for i in range(0,len(invest)):

            """ 
            在循環中獲取投資人的信息,包括標的id/用戶名/金額/投資終端等 
            """
            iloaders = GljrListItemLoader(item=GljrListItem(), response=response)
            iloaders.add_value("invest_username", invest[i]['user']['username'])
            iloaders.add_value("invest_amount", invest[i]['account'])
            iloaders.add_value("target_urls", target_urls)
            iloaders.add_value("target_id", target_urls)
            iloaders.add_value("invest_id", invest[i]['user']['userId'])
            iloaders.add_value("invest_stats", invest[i]['fromType'])

            iloaders_item = iloaders.load_item()
            yield iloaders_item

5、數據利用與價值

總的來講,不管是像泛灣天域經過html/css渲染數據,仍是像福金貸經過JS渲染數據,或者像夠力金融、樂助貸這樣經過Ajax api渲染數據,都是能夠經過爬蟲把數據爬取下來的。spa

尤爲是Ajax api這種類型的數據,雖然在取值的時候彎彎繞繞,可是取下來的值是比較完整的,好比夠力金融,在api字段裏就有userid(投資人)和broworid(借款人),那麼將全部數據爬取下來後,經過userid和投資記錄,就能夠分析出平臺的投資人組成質量,好比投資頻率、投資偏好、風險偏好、投資能力。結合平臺所作的營銷活動、推廣平臺和一些運營行爲,取估算這個平臺的運營軌跡,包括增加期、爆發期和平穩期都在什麼時間段,若是數據詳細,甚至能夠推算出哪一個推廣平臺的投入產出比RIO比較好。

再者,經過平臺借款人ID能夠推測平臺標的真實性、連貫性和是否存在借新還舊這種狀況。數據越多、越詳細,獲得的結果就越準確,反之則然。

相關文章
相關標籤/搜索