Python爬虫 - 人人贷散标
前言
这次爬的网站 人人贷 - 散标 是一个客户要求爬的,数据一共是148w多条,不过后来发现有绝大部分是无效数据,也就是那个页面不存在,不过我看网上很多人爬这个网站都是用什么 BeautifulSoup、Selenium,首先 BeautifulSoup 提供 Cookie 应该是能爬,不过以前的页面和现在的页面有些不同,应该有点麻烦,我没试过;而 Selenium 可以直接放弃了,就一个原因,慢,你如果是爬几十个、几百个页面你也许能忍;我这次用的方法有些不同,不需要 Cookie,而且用 Scrapy 速度也挺快;(以下测试用到的网页都是 https://www.renrendai.com/loan-2996659.html)
正文
一、分析站点
在抓取每个网站前肯定是需要分析它的结构的,我随便点了一个最新的散标网页,如下图可见没登陆仅能显示一小部分信息
再看看其源码,毛都没有,只有登陆后才有内容,?
那可不一定哦,切换到 Network 然后刷新网页,从中获取返回的response,翻到最下面的 js 代码部分,大概400行处
可以看到有些js变量内容是unicode,然后还有用到了json解析方法,将这部分代码复制然后切换到 console 粘贴
随便用一个变量让其弹出代码提示,可以看到有很多json key
borrower 应该是借款人的意思,可以看到其内容就是借款人的信息
那么只需要用正则获取到这些json然后解析就能获取其所有信息,不过目前还不知道哪些 key 代表哪部分信息,不过想了一想,既然所有信息都返回了那肯定有对应的js来解析,接着我从之前刷新的内容中发现一个js文件就是需要的
将其下载下来便于之后写代码分析
二、代码
1、首先获取js变量info、detail,这两个保存了所有信息,而上面保存的js文件就是对其解析用的
1 | html = resp.text |
2、接着用json.loads对其转换,不过在此之前先得把其中得unicode给转换一下,因为从requests获取到的都是直接转义过了的,所以我直接写了一个方法,其中的内容仅针对人人贷散标网页
1 | def de_unicode(text): |
不过还不能用json.loads,因为其中 [] 中括号是加了双引号的原因会让其报错,所以我又写了一个方法
1 | def de_json_str(text): |
接着就能直接转换了
1 | # 获取info |
获取到json对象的info、detail后就开始解析,在此之前先分析一下直接下载的js解析文件
createLeftDom 方法解析的是我们没登陆看到的部分借款信息
createTransferHtml 方法是借款人的信息解析
getMarriage 方法是婚姻信息解析,因为你在info里获取到的婚姻状态是英语表示的
还有想获取什么信息直接看那个js代码即可,我就不再分析了,不过我客户有个需求是获取散标状态,也就是散标是否还款完、违约等状态,不过那个信息是张图,所以我们需要接着分析js,这里是个switch(我不会js,ase应该是类似case)
其中 OVERDUE 是表示逾期,BADDEBT 是坏账 应该是欠账的意思把,而其对应的图片关系到status这个变量,status这个变量就是所判断的值,status是从loan中获取的
loan是在info中获取的,尝试获取,其内容是 IN_PROGRESS
不过如果直接将 IN_PROGRESS 替换到那个图片链接中是没有这个图片的,status经过 utils.loanAllType 方法处理过,这个方法来源于 common_wdg_6fdbabe.js 文件
从这可以看到如果 status == IN_PROGRESS,那么sta就等于 REPAYING,这个就是返回的内容,接着按照你的需求写代码即可
最后
项目:renrendai