以前有爬取过乐助贷的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能够推测平台标的真实性、连贯性和是否存在借新还旧这种状况。数据越多、越详细,获得的结果就越准确,反之则然。