python 输入参数 获取不到_求助篇python3-re应用-数据无法获取

本篇文章介绍使用python抓取贷款及理财平台的数据,并将数据拼接和汇总。最终通过tableau进行可视化。与之前的python爬虫文章 不同之处在于之前是一次性抓取生产数据表,本次的数据需要每天重复抓取及存储,并汇总在一起进行分析和可视化。

准备工作

开始之前先导入所需使用的库文件,各个库文件在整个抓取和拼表过程中负责不同的部分。Requests负责页面抓取,re负责从抓取下来的页面中提取有用的信息,pandas负责拼接并生成数据表以及最终的数据表导出。

#导入requests库(请求和页面抓取)

import requests

#导入正则库(从页面代码中提取信息)

import re

#导入科学计算库(拼表及各种分析汇总)

import pandas as pd

设置一个头文件信息,方便后面的抓取。这个头文件有两个作用,第一防止抓取时被封,第二方便后面对页面源文件的转码。

抓取贷款及理财信息

准备工作完成后开始对贷款和理财信息进行抓取,这里我们偷个懒,直接抓取http://p2peye.com的信息。http://p2peye.com是一个网贷咨询及数据

平台,内容很丰富。他们定期更新各平台的贷款及理财数据。

因为所有的网贷平台信息都在一页上,所以抓取起来比较简单,不需要翻页。下面是抓取并保存页面信息的代码。

r=requests.get('http://www.p2peye.com/shuju/ptsj/',headers=headers)

html=r.content

#抓取下来的信息需要进行转码才能变成有用的信息,下面对页面源代码进行GBK转码。

#对抓取的页面进行编码

html=str(html, encoding = "GBK")

查看一下转码后的页面,我们需要的信息都包含在里面了。后面只需要使用正则表达式逐个提取出来就可以了。

#查看抓取的页面源码

html

提取信息并进行数据清洗

使用正则表达式对应着页面中的字段逐个将关键数据从页面源码中提取出来,下面是具体的过程,首先提取的是平台名称字段。在页面源码中平台名称在title中。

#使用正则提取title字段信息

title=re.findall(r'"return false".*?title="(.*?)"',html)

#提取后查看下结果,内容很干净,不需要进行清洗可以直接使用。

#查看title字段信息

title

这里有一点要注意的是每个提取出来的字段最好都要检查下,并且查看下数据的条目。因为有时候提取的条目中包含有其他的信息,

导致字段间条目数量不一致,这种情况下后面是无法拼接成数据表的。

#查看title字段数量

len(title)

按照提取平台名称title的方法,后面我们依次提取了贷款利率,贷款金额,满标时间等关键信息。下面是具体的代码。

#使用正则提取total字段信息

total=re.findall(r'"total">(.*?)万

#使用正则提取rate字段信息

rate=re.findall(r'"rate">(.*?)

#使用正则提取pnum字段信息

pnum=re.findall(r'"pnum">(.*?)人

#使用正则提取cycle字段信息

cycle=re.findall(r'"cycle">(.*?)月

#使用正则提取plnum字段信息

p1num=re.findall(r'"p1num">(.*?)人

#使用正则提取fuload字段信息

fuload=re.findall(r'"fuload">(.*?)分钟

#使用正则提取alltotal字段信息

alltotal=re.findall(r'"alltotal">(.*?)万

#使用正则提取captial字段信息

capital=re.findall(r'"capital">(.*?)万

由于后面我们要对数据进行累计追加及趋势分析,因此在这里导入time库生成当天的日期,并将日期作为一个字段一起放在数据表。

#导入time库(获取日期)

import time

date=time.strftime('%Y-%m-%d',time.localtime(time.time()))

当天的日期信息将和数据一起生成数据表。

#日期

date

创建贷款及理财数据表

将前面提取出来的数据和日期信息一起生成数据表,首先使用columns参数设置数据表中各字段的排列顺序。

#设置数据表各字段顺序

columns = ['采集日期','平台名称','成交额(万)','综合利率','投资人(人)','借款周期(月)','借款人(人)','满标速度(分钟)','

累计贷款余额(万)','净资金流入(万)']

然后设置各字段的名称,并生成数据表。

#创建数据表

table=pd.DataFrame({'采集日期':date,

'平台名称':title,

'成交额(万)':total,

'综合利率':rate,

'投资人(人)':pnum,

'借款周期(月)':cycle,

'借款人(人)':p1num,

'满标速度(分钟)':fuload,

'累计贷款余额(万)':alltotal,

'净资金流入(万)':capital},

columns=columns)

查看生成的数据表,字段顺序与我们设置的一致,下一步把数据表导出为csv文件。便于后续的处理和分析。

#查看数据表

table

导出及追加数据

将生成的数据表导出为csv文件。这里有两种导出方式。第一是新建数据表。但比较麻烦,后续要需要手动将每天的数据进行拼接。因

此还有第二种导出方式就是在一个数据表中不断追加新数据。

第一种方式将数据表导出为一个新的csv文件,文件名为wdty加上数据抓取的具体日期,也就是date中的值。

#导出csv文件

table.to_csv('C:\\Users\\ Desktop\\wdty'+date+'.csv',index=False)

第二种方式是在一个csv文件中持续追加导出新的数据表。这里我们建立一个wdty的csv文件,每天抓取的数据都会追加到这个csv文件

中。代码与之前的新建csv文件类似,唯一的区别是增加了mode参数,这个参数默认值是w,也就是新建。把值改为a就是追加导出。

#在历史csv文件中追加新信息

table.to_csv('wdty.csv',index=False,mode='a')

完整代码:

import sys

import time

time1 = time.time()

import requests

from lxml import etree

import re

import pandas as pd

# 解决打印结果中有省略号

pd.set_option('display.max_columns', 1000)

pd.set_option('display.width', 1000)

pd.set_option('display.max_colwidth', 1000)

def loan_data():

start = time.clock()

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',

'Accept': 'application/json, text/javascript, */*; q=0.01',

'Accept-Encoding': 'gzip, deflate, br',

'Accept-Language': 'zh-CN,zh;q=0.9',

'Connection': 'keep-alive',

'Referer': 'https://www.p2peye.com/shuju/ptsj/',

'Host': 'www.p2peye.com'

}

headers['Cookie'] = 'TYID=enANiFwRxtdSnhbZE4HTAg==; __jsluid=3ab95d4171a34bf29273d7f9611595b1; A4gK_987c_saltkey=z5ZDS512; A4gK_987c_lastvisit=1544665288; __firstReferrerKey__=%7B%22%24first_referrer%22%3A%22%22%2C%22%24first_referrer_host%22%3A%22%22%7D; A4gK_987c_connect_qq_nick=%C1%D6%D6%D0%B3%AF%CF%BC; A4gK_987c_stats_qc_login=4; A4gK_987c_client_created=1544671235; A4gK_987c_client_token=1; A4gK_987c_connect_login=1; A4gK_987c_connect_is_bind=1; A4gK_987c_connect_uin=3974A8914DF1AFFEF6EE769B949E428B; A4gK_987c_stats_qc_reg=1; TY_SESOURCE=se_baidu; A4gK_987c_visitedfid=83; A4gK_987c_ulastactivity=1544695434%7C0; A4gK_987c_smile=1D1; Hm_lvt_556481319fcc744485a7d4122cb86ca7=1544668891,1544695449,1544748553,1544749269; A4gK_987c_sendmail=1; Hm_lpvt_556481319fcc744485a7d4122cb86ca7=1544749288; bdp_data2017jssdkcross=%7B%22distinct_id%22%3A%22167a570c3548e-0c7ae011f99fb8-3f674604-1049088-167a570c35658%22%2C%22props%22%3A%7B%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22user_id%22%3A%22aMP6Y6ku%22%2C%22target_name%22%3A%22emptyaMP6Y6ku%7Cse_baidu%7CemptyaMP6Y6ku%22%2C%22%24is_first_session%22%3A0%7D%7D; A4gK_987c_lastact=1544749299%09ajax.php%09advertisement; __bdpa_session_key__2017__=%7B%22session_time%22%3A1544749299948%2C%22session_id%22%3A%22167aa304df94da-06bf94968052c3-3f674604-1049088-167aa304dfb1d3%22%2C%22session_hasBeenExpired%22%3A0%2C%22lastSend_sessonId%22%3A%22167aa304df94da-06bf94968052c3-3f674604-1049088-167aa304dfb1d3%22%7D'

r = requests.get('https://www.p2peye.com/shuju/ptsj/', headers=headers)

status = r.status_code

if status == 200:

print('页面抓取状态正常。')

else:

os._exit(0)

html = r.content

html = str(html, encoding="gbk")

print('编码转换完成!')

title = re.findall(r'"return false".*?title="(.*?)"', html, re.S)

total = re.findall(r'"total left" >(.*?)万

# total = re.findall('

(.*?)万
', html, re.S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值