以前有爬取過樂助貸的api,實際上方式是同樣的。這篇寫夠力金融,其實是由於它的翻頁比樂助貸的翻頁麻煩,因此記錄一下。夠力金融的平臺交易量挺大,數據量也較多,我就不完整爬取了,記錄一下爬蟲的邏輯。css
經過接口請求,獲取夠力金融的標的詳細信息及投資人詳細信息html
1.標的列表頁是html/css渲染json
2.標的詳情頁的標的數據是html/css渲染api
3.投資人列表是Apidom
代碼邏輯記錄一下: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
總的來講,不管是像泛灣天域經過html/css渲染數據,仍是像福金貸經過JS渲染數據,或者像夠力金融、樂助貸這樣經過Ajax api渲染數據,都是能夠經過爬蟲把數據爬取下來的。spa
尤爲是Ajax api這種類型的數據,雖然在取值的時候彎彎繞繞,可是取下來的值是比較完整的,好比夠力金融,在api字段裏就有userid(投資人)和broworid(借款人),那麼將全部數據爬取下來後,經過userid和投資記錄,就能夠分析出平臺的投資人組成質量,好比投資頻率、投資偏好、風險偏好、投資能力。結合平臺所作的營銷活動、推廣平臺和一些運營行爲,取估算這個平臺的運營軌跡,包括增加期、爆發期和平穩期都在什麼時間段,若是數據詳細,甚至能夠推算出哪一個推廣平臺的投入產出比RIO比較好。
再者,經過平臺借款人ID能夠推測平臺標的真實性、連貫性和是否存在借新還舊這種狀況。數據越多、越詳細,獲得的結果就越準確,反之則然。