手把手教你用python爬取人人贷网站借款人信息

版权声明:原创内容,禁止用于商业用途 https://blog.csdn.net/starkbling/article/details/82144070

P2P是近年来很热的一个行业,由于这个行业在国内兴起才不久,国内的很多学者对这个行业都兴趣盎然,在大学研究互联网金融的学者更是有一大群。小编是学金融出身,深知数据在做学术研究的重要性,之前有不少学互联网金融的同学、师弟师妹们都请教过我如何获取研究数据,小编当年论文的研究数据其实也是花了不少大洋在网上买的。最近有幸接触到python这个强大的工具,python的一个强大的功能就是进行数据发掘(俗称“爬虫”),原来爬虫并没有想象中的那么难,只要花点功夫学习一下你也可以,下面就让我手把手教你们如何在人人贷网站上爬虫借款人信息。

首先我们需要下载并安装python软件,windows版本下载地址,下载python 3.5以上的版本, 建议下载可以直接安装的包:Windows x86 executable installer,下载下来之后直接双击安装,安装的时候记得勾选Add python to path选项

勾选 add python to path选项
,后面的按默认的选项安装即可。

由于人人贷中借款人的信息需要登录之后才可见,因此需要先注册一个人人贷的账号用于爬虫。本爬虫脚本调用的是Firefox浏览器,需要电脑先下载并安装Firefox浏览器,用Firefox爬虫需要下载相应的驱动,可以到下面的地址下载下载geckodriver,并将该文件放在python的安装目录python3.exe所在的目录。

该爬虫脚本还需要用到几个模块,需要使用pip来安装,首先确保pip在电脑的环境变量中,关于如何设置电脑的环境变量网上有很多相关的文章,可以自行去了解。按住 win+R键,输入cmd调用系统的DOS命令栏,然后用pip安装对应的python包,使用的命名格式如下:pip install “模块名”,如安装selenium模块,命令如下pip install selenium。采用这种方式分别安装selenium、pandas、bs4、requests、numpy模块。
用pip安装python模块

用于爬虫的脚本如下,在电脑上新建一个文件夹,命名为人人贷数据爬虫,然后用记事本在里面新建一个文件,并将后缀名改为.py,如renrendai_scrapy.py ,copy如下的脚本到这个renrendai_scarpy.py文件夹中,代码写的比较烂,源代码如下:

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 13 11:10:39 2018
@author: 95647
"""
from selenium import webdriver
import time
import json
import pandas as pd
import numpy as np
from bs4 import BeautifulSoup
from selenium.webdriver.firefox.options import Options  #use headless browser login ini
import requests
from pandas import DataFrame
time_start = time.clock()

#driver = webdriver.PhantomJS(executable_path=r'''C:\Users\95647\Desktop\小工具\phantomjs-2.1.1-windows\bin\phantomjs.exe''')
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
#headers according to push F12 in browser
#use the login information you have signed
username = u"username_"      #在此填入你的用户名
password = "password_"     #在此填入你的密码
#driver = webdriver.Firefox()  

#使用Firefox自带的无头浏览器登录
options = Options()
options.add_argument('-headless')
driver = webdriver.Firefox(firefox_options=options)  #use headless firefox to login in

def LoginRRD(username, password):
    try:
        print(u'准备登录人人贷网站...')
        driver.get("https://www.we.com/pc/passport/index/login")
        elem_user = driver.find_element_by_name("j_username")
        elem_user.send_keys(username)
        time.sleep(2)  #设置等待时间,不用修改
        elem_pwd = driver.find_element_by_name("j_password")
        elem_pwd.send_keys(password)
        time.sleep(5)   #设置等待时间,以防止用户名下拉菜单挡住登录按钮
        driver.find_element_by_xpath(r"""//*[@id="form-login"]/div/div[2]""").click() #点击登录
        time.sleep(10) #设置等待几秒,以进入用户主界面,如不等待而直接进入爬虫会提示未登录
        print(u'登录成功!')
    except Exception as e:
        print("Error:", e)
    finally:
        print(u'End Login!\n')
loanid_e =[]
def parse_userinfo(loanid,idx): 
    """用于提取借款人各项信息数据"""
    global loanid_e
#    print(str(loanid))
    urll="https://www.renrendai.com/loan-%s.html"%str(loanid)  
    driver.get(urll)
    html = BeautifulSoup(driver.page_source,'lxml')
#    print(html.decode('utf-8'))
#    f= open("html0.txt","w")
#    f.write(html.decode("utf-8").replace('\xa9',"@"))    
#    f.close
    info = html.findAll('div',class_="loan-user-info")  #这个地方的命名经常修改
    userinfo = {}
    try:
        items = info[0].findAll('span',{"class":"pr20"})
    except IndexError as e:
        LoginRRD(username, password)
        loanid_e.append(loanid)
    else:    
        for item in items:
            var = item.get_text()
            value = item.parent.text.replace(var,"")
            userinfo[var]=value
        data = pd.DataFrame(userinfo,index=[idx])            
        return data

def get_loanId():
    table=DataFrame(np.array(['allowAccess', 'amount', 'amountPerShare', 'beginBidTime', 'borrowerId',
                              'borrowerLevel', 'currentIsRepaid', 'displayLoanType', 'finishedRatio',
                              'forbidComment', 'interest', 'interestPerShare', 'leftMonths', 'loanId',
                              'loanType', 'months', 'nickName', 'oldLoan', 'openTime', 'overDued',
                              'picture', 'principal', 'productId', 'readyTime', 'repaidByGuarantor',
                              'startTime', 'status', 'surplusAmount', 'title', 'utmSource']).reshape(1,30),columns=['allowAccess',
        'amount', 'amountPerShare', 'beginBidTime', 'borrowerId',
        'borrowerLevel', 'currentIsRepaid', 'displayLoanType', 'finishedRatio',
        'forbidComment', 'interest', 'interestPerShare', 'leftMonths', 'loanId',
        'loanType', 'months', 'nickName', 'oldLoan', 'openTime', 'overDued',
        'picture', 'principal', 'productId', 'readyTime', 'repaidByGuarantor',
        'startTime', 'status', 'surplusAmount', 'title', 'utmSource'])#网页源码获取
    i=1
    for i in range(1,101):    #当前101散标信息页面一共只有101页,所以填的是101,可根据具体情况修改
        url = "https://www.renrendai.com/loan/list/loanList?startNum=%s&limit=10"%str(i) #resourse of data
        resp=requests.get(url,headers=headers)    #获取页面源代码
        html=resp.text 
        data_dic = json.loads(html)
        data=DataFrame(data_dic['data']['list'])
        table=pd.concat([table,data])
        i += 1
    #save file
    table.to_csv('人人贷11.csv',header=False) #保存贷款人信息到人人贷.csv文件夹中
    loanId=table['loanId']
    return loanId

LoginRRD(username, password)   #login renrendai website
loanId = get_loanId()     #获取借款人ID 
user_info = ['昵称', '信用评级','姓名','身份证号','年龄', '学历', '婚姻','申请借款', '信用额度', 
             '逾期金额', '成功借款', '借款总额', '逾期次数','还清笔数', '待还本息', 
             '严重逾期','收入', '房产', '房贷', '车产', '车贷','其他','公司行业',
             '公司规模', '岗位职位', '工作城市', '工作时间']
table2 = pd.DataFrame(np.array(user_info).reshape(1, 27), columns=user_info)


i = 1
idx = 0 
for loanid in loanId[1:10]:  
    """
    后面的数值用来设置需要爬取多少个借款人信息,如全部需要就输入len(loanId +1)替代1000,
    建议先输入5来进行爬虫测试,以避免爬虫时间太长,而实际没有抓取到数据
    """
    table2 = pd.concat([table2, parse_userinfo(loanid,idx)])
#    print(loanid)
    print(i)
    idx += 1
    i += 1   #check how many times of this program loop

table2.to_csv('borrowerinfo1.csv',header=False)

time_end = time.clock()  #this scarpy use of total time
print("\nElapsed time: %s seconds"%(str(time_end -time_start)))

需要修改代码里面的部分内容,将username = u”username_” 里面的username_修改为自己的用户名,password = “password_”,将里面的 password_ 修改为自己的登录密码。还有其他可以修改的地方都用中文提示了,请按照自己的需要进行相应的设置。完成以上工作之后,见证奇迹的时刻来了。

同时按住win+R键,输入cmd按回车,调出dos命名栏,然后在里面输入python + renrendai_scrapy.py的文件路径,如:C:\Users\95647>python desktop\1\renrendai_scrapy.py ,“>”后面是我输入的命令,文件路径实际上是在C:\Users\95647\ desktop\1\renrendai_scrapy.py,由于我前面已经定位到了C:\Users\95647,所以节省了前面的输入,可对照下图。
爬虫脚本运行命令截图
爬虫处理的结果保存的文件格式为csv格式,可以用excel直接打开,但是需要转换一下csv的编码格式,可以用notepad++等软件来转为ANSI的编码格式,这样用excel打开就能够正常显示了,我这边测试爬虫了前1000个用户的数据(总共用时30多分钟,这个和你的网速关系比较大),每个用户包含了27条信息,部分结果如下:
借款人信息表
对爬虫感兴趣的朋友还可以阅读我的另外一条博文:用python爬取网贷之家p2p平台数据
如有任何问题或者想爬虫其他网站数据的朋友,欢迎留言或者加QQ:956471511 一起探讨学习!

猜你喜欢

转载自blog.csdn.net/starkbling/article/details/82144070