人人貸網的數據爬取


之前看到過網上有一篇有關爬取P2P網站上散標投資數據和借貸人的信息數據的博文,后應他人請求,幫忙實現。發現存在不少問題,先整合前人資料(http://sanwen8.cn/p/156w57U.html),說一下爬取中遇到的問題:

(一)首先分析"散標投資"這一個模塊,共有51個頁面
    1. 進入首頁,調用360瀏覽器的F12(界面如下)選擇Network->XHR

    2. 后在上圖中左側點擊到第2個頁面,右側那一欄會彈出3個事件(對其中Method為GET的那一個事件進行分析)


    3. 點擊Header,對General->Requesl URL, 和Request Headers->User-Agent 進行分析(后文中會用到)


      仔細觀察Request URL:http://www.we.com/lend/loanList!json.action?pageIndex=2&_=1474379219318,你會發現數據是Json格式,查看下一頁,發現也是如此,不同頁面的數據格式是相同的。對此,我們的抓取思路就是:獲取網頁源代碼,從源代碼中提取數據。
      數據來自於類似這樣的地址:
      http://www.we.com/lend/loanList!json.action?pageIndex=2&_=1457395836611,刪除&_=1457395836611后的鏈接依然有效,打開鏈接發現是json格式的數據,而且數據就是當前頁面的數據。至此,我們就找到了真正的數據來源
    4. 以下就是爬取"散標列表"數據的代碼(Python 3.5.2 |Anaconda 4.0.0 (64-bit),低版本好像不能解析utf-8)
      要想配置高版本見http://www.cnblogs.com/Yiutto/p/5631930.html
      import pandas as pd
      import numpy as np
      import requests
       
      headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}
      #headers得根據自己的瀏覽器F12下自行修改調整,具體可見步驟c
      
      #自定義了一個解析網頁的函數
      def parse_html(i):
      
          url = "http://www.we.com/lend/loanList!json.action?pageIndex=%s&" % i #數據的真正來源(Request URL)
      
          resp=requests.get(url,headers=headers) #獲取頁面
      
          html=resp.json() #頁面文字
      
          data=pd.DataFrame(html['data']['loans'])
      
          data.to_csv('loans%s.csv' % i) #將整理后的數據寫入csv格式文檔
      
          print("%s successsed" % i)
      
       
      

(頁面總共51個,可自己寫個循環語句,但循環過程中可能出錯,我自己就是一個個頁面爬取的,然后再把51個頁面的數據loan整合)
總的來說,第一步為得是給第二步做鋪墊,因為第二步需要用到第一步中loans.csv中的loanId,可自行將其單獨整理為一個csv文檔

(二)如何獲取借貸人信息
a.點擊其中一欄即可進入借貸人信息




為什么看不到借貸人信息呢,首先你的搞到一個帳號登錄即可見(自己隨便注冊一個啦)

b.帳號登錄后,按F12,剛開始又是空白,如下圖

    

這時只要刷新一下頁面,然后找到Method為Get的事件,點擊打開

記住Request Headers->Cookie, 后面代碼需要用到它

c.爬取借貸人信息的源代碼
    

import pandas as pd
import re
import numpy as np
import requests
import time
import random
from bs4 import BeautifulSoup

s=requests.session()

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}
#根據瀏覽器下自行修改

headers['Cookie'] = 'gr_user_id=022d0f46-4981-4224-9895-18bfe32d9276; rrdLoginCartoon=rrdLoginCartoon; pgv_pvi=905847926; Hm_lvt_16f9bb97b83369e62ee1386631124bb1=1474288518,1474332677,1474336816,1474368269; Hm_lpvt_16f9bb97b83369e62ee1386631124bb1=1474372985; JSESSIONID=7EB90C9967D8C42B08DFB18EB9A9F74ED2ACC468B7D56B9372E2A20684713847; jforumUserInfo=bEAY23pgyLLLjII69w9oS%2BtK2jljmxa8%0A; IS_MOBLIE_IDPASS=true-false; activeTimestamp=5195275; gr_session_id_9199126ed94d770d=70bbe285-4ac6-42c9-a49b-9255d0eb9c46; gr_cs1_70bbe285-4ac6-42c9-a49b-9255d0eb9c46=user_id%3A5195275'
#根據瀏覽器F12下的Request Headers->Cookie自行復制上去即可


def parse_userinfo(loanid):#自定義解析借貸人信息的函數
    timestamp=str(int(time.time())) + '%03d' % random.randint(0,999)
urll="http://www.we.com/lend/detailPage.action?loanId=%.0f&timestamp=" % loanid+timestamp
#這個urll我也不知道怎么來的,貌似可以用urll="http://www.we.com/loan/%f" % loanid+timestamp
#(就是頁面本身,我也沒試過)
    result = s.get(urll,headers=headers)
    html = BeautifulSoup(result.text,'lxml')
    info = html.find_all('table',class_="ui-table-basic-list")
    info1= info[0]
    info2 = info1.find_all('div',class_="basic-filed")
    userinfo = {}
    for item in info2:
        vartag = item.find('span')
        var = vartag.string
        if var == '信用評級':
            var = '信用評分'
            pf1 = repr(item.find('em'))
            value = re.findall(r'\d+',pf1)
        else:
            valuetag = item.find('em')
            value = valuetag.string
        userinfo[var]=value
    data = pd.DataFrame(userinfo)
    return data

rrd=pd.read_csv('loanId.csv') #loanId是之前散標數據中的loanId,將其單獨整理為一個csv文檔
loanId=rrd.ix[:,'loanId']
user_info = ['昵稱', '信用評分',

            '年齡', '學歷', '婚姻',

            '申請借款', '信用額度', '逾期金額', '成功借款', '借款總額', '逾期次數','還清筆數', '待還本息', '嚴重逾期',

            '收入', '房產', '房貸', '車產', '車貸',

'公司行業', '公司規模', '崗位職位', '工作城市', '工作時間']

table = pd.DataFrame(np.array(user_info).reshape(1, 24), columns=user_info)

i = 1

for loanid in loanId:
    table = pd.concat([table, parse_userinfo(loanid)])
    print(i)
    i += 1 #看一下循環多少次

table.to_csv('userinfo.csv',header=False)

  

整理出來的數據可能會有點亂,但總的來說還是不錯的。(相信大家還是能清理的)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM