前言这次爬的网站 [人人贷 - 散标](网贷p2p散标列表 - 人人贷官网) 是一个客户要求爬的,数据一共是148w多条,不过后来发现有绝大部分是无效数据,也就是那个页面不存在,不过我看网上很多人爬这个网站都是用什么 BeautifulSoup、Selenium,首先 BeautifulSoup 提供 Cookie 应该是能爬,不过以前的页面和现在的页面有些不同,应该有点麻烦,我没试过;而 Selenium 可以直接放弃了,就一个原因 慢,你如果是爬几十个、几百个页面你也许能忍;我这次用的方法有些不同,不需要 Cookie,而且用 Scrapy 速度也挺快;(以下测试用到的网页都是 https://www.renrendai.com/loan-2996659.html)

正文

一、分析站点

在抓取每个网站前肯定是需要分析它的结构的,我随便点了一个最新的散标网页,如下图可见没登陆仅能显示一小部分信息

再看看其源码,毛都没有,只有登陆后才有内容?

那可不一定哦,切换到 Network 然后刷新网页,从中获取返回的response,翻到最下面的 js 代码部分,大概400行处

可以看到有些js变量内容是unicode,然后还有用到了json解析方法,将这部分代码复制然后切换到 console 粘贴

随便用一个变量让其弹出代码提示

borrower 应该是借款人的意思,可以看到其内容就是借款人的信息

那么只需要用正则获取到这些json然后解析就能获取其所有信息,不过目前还不知道哪些 key 代表哪部分信息,不过想了一想,既然所有信息都返回了那肯定有对应的js来解析,接着我从之前刷新的内容中发现一个js文件就是需要的

将其下载下来便于之后写代码分析

二、代码

1、首先获取js变量info、detail,这两个保存了所有信息,而上面保存的js文件就是对其解析用的

html = resp.text

pattern = "var.?info.?=.?'(.*?)';?\n+?var.?detail.?=.?'(.*?)';?\nvar isTransfer"

info, detail = re.findall(pattern, html)[0]

2、接着用json.loads对其转换,不过在此之前先得把其中得unicode给转换一下,因为从requests获取到的都是直接转义过了的,我用 .encode('utf-8').decode('utf-8','ignore') 无法转换(求教) 所以我直接写了一个方法,其中的内容仅针对人人贷散标网页

def de_unicode(text):

"""unicode转换,因为从response获取到的内容被转义无法直接decode(我不会"""

return text.replace('\\u0022', '"').replace('\\u005C', '').replace('\\u002D', '-')

不过还不能用json.loads,因为其中 [] 中括号是加了双引号的原因会报错,所以我又写了一个方法

def de_json_str(text):

"""替换[]括号,直接json.loads会因为[]加了双引号的原因报错"""

return text.replace('"[', '[').replace(']"', ']')

接着就能直接转换了

# 获取info

info = json.loads(de_json_str(de_unicode(info)))

# 获取detail

detail = json.loads(de_json_str(de_unicode(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 文件

utils.loanAllType = function(status) {

var sta = "";

return sta = "OPEN" == status ? "OPEN" :

"FIRST_APPLY" == status ||

"APPLY" == status ? "APPLY" :

"FIRST_READY" == status ||

"READY" == status ? "READY" :

"IN_PROGRESS" == status ||

"REPAYING" == status ? "REPAYING" :

"OVER_DUE" == status ||

"OVERDUE" == status ? "OVERDUE" :

"BAD_DEBT" == status ||

"BADDEBT" == status ? "BADDEBT" :

"FAILED" == status ? "FAILED" :

"CLOSED" == status ? "CLOSED" : "UNKNOWN"

从这可以看到如果 status == IN_PROGRESS,那么 sta 就等于 REPAYING,这个就是返回的内容,接着按照你的需求写代码即可

最后

python爬人人贷代码视频_Python爬虫 - 人人贷散标相关推荐

  1. python爬微信公众号视频_python爬虫公众号所有信息,并批量下载公众号视频

    之前写过一篇类似的文章:python爬取公众号,用最简单的方式爬虫 还有同学一直在问,可能中间有一些小细节不明确,这次彻底明确一下细节. 本篇添加一个批量下载公众号内视频的功能,可以实现完全复制一个公 ...

  2. python爬app无水印视频_Python爬虫:短视频平台无水印下载 (上)

    导入: 虽然目前有些软件还没适配,但是,我发了 Blink 后有一写人留言或者私信找我要源码,不过我还在增加适配的软件,所以还没有时间写这篇博客,今天呢,就先把我目前适配了的代码拿出来,后续还会继续适 ...

  3. python爬虫源码下载 视频_Python爬虫下载视频文件部分源码

    importrequestsimporttime headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebK ...

  4. python爬微信公众号视频_python爬虫微信公众号视频

    import time import json import random import csv from selenium import webdriver from lxml import htm ...

  5. python爬取数据的原理_Python爬虫原理

    前言 简单来说互联网是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML.JS.CSS代码返回给浏览器,这些代码经过浏览器解析.渲染,将丰富多彩的网页呈现我们眼前: 一.爬虫是什 ...

  6. python爬取虎扑评论_python爬虫系列Selenium定向爬取虎扑篮球图片详解

    前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员 ...

  7. python爬取链家新房_Python爬虫实战:爬取链家网二手房数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 买房装修,是每个人都要经历的重要事情之一.相对于新房交易市场来说,如今的二手房交易市场一点也 ...

  8. python爬取网页数据流程_Python爬虫爬取数据的步骤

    爬虫: 网络爬虫是捜索引擎抓取系统(Baidu.Google等)的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份. 步骤: 第一步:获取网页链接 1.观察需要爬取的多 ...

  9. python爬取多页数据_python爬虫实现爬取同一个网站的多页数据代码实例

    本篇文章小编给大家分享一下python爬虫实现爬取同一个网站的多页数据代码实例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 一.爬虫的目的 从网上获 ...

最新文章

  1. java.io.EOFException java.io.ObjectInputStream$PeekInputStream.readFully 错误
  2. 支持向量机原理讲解(一)
  3. 【Java基础】异常处理与输入输出流
  4. Android webview加载pdf实验成功
  5. 文本分类数据集_181个NLP教程,481个文本数据集,Colab一键直达,无需环境配置...
  6. 华为最新开源框架mindspore学习
  7. Python机器学习---KNN模型评价、追求
  8. 这部纪录片央视发力了,每一帧都可以当壁纸,BBC也无法超越
  9. Flash Player Control for ASP.NET
  10. 图像处理——SIFT算法
  11. SEO优化 SEO基础
  12. 规则引擎Drools使用 第十一篇 Drools 的高级语法之LHS增强
  13. 基本流水线与记分牌算法和Tomasulo算法
  14. 爬虫增加代理池:使用稳定第三方芝麻代理IP 教程(详细可用)
  15. 花指令的原理、常用花指令收集及花指令示例
  16. 【Machine Learning】梯度下降算法介绍_02
  17. HCIE面试题之交换机和路由器收到未知表项数据包如何处理
  18. java技术晨讲可以讲什么内容,晨讲和晨测都是提升郑州达内小伙们技能的好方法...
  19. linux修改英文设置密码,linux 如何修改passwd的密码 设置密码
  20. 安装报错:TypeError: _classify_installed_files() got an unexpected keyword argument ‘cmake_install_dir‘

热门文章

  1. NOIP2011聪明的质检员
  2. macbook视频格式转换_‎Mac App Store 上的“一键视频格式转换器”
  3. 【C语言初阶】操作符之 位运算符详解(“ << ”,“ >> ”,“ ”,“ | ”,“ ^ ”,“ ~ ”)
  4. 字体像素html,Chrome中的字体像素问题(HTML5 / CSS3)
  5. 尚硅谷-Linux学习
  6. PairProject 总结
  7. GSM上行频率和下行频率、3G频率分配
  8. c语言删除括号内的字符,去括号 (C语言代码)
  9. 大学生交友平台——项目启动篇
  10. 安卓图案解锁NC13585