记得之前应同学之情,帮忙爬取人人贷网的借贷人信息,综合网上各种相关资料,改善一下别人代码,并能实现数据代码爬取,具体请看我之前的博客:http://www.cnblogs.com/Yiutto/p/5890906.html
但过了一段时间,发现之前的代码运行不能爬取到数据,而且数据爬取过多也会出现一些错误(我估摸这后台检测到同一个帐号过多访问,给强制下线了)老是弹出下面的错误如下图: 总而言之,代码可用性不高,性能不是很好。

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
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

后根据错误进行分析,发现原来是根本获取不到借贷人信息出现的错误,

就是info = html.find_all('table',class_="ui-table-basic-list")执行这条语句,info是空的,意思就是根本找class_="ui-table-basic-list"这个东东,后来思前想后,发现,原来人人贷网站需要用户登录才能看到其相应的借贷人信息。也就是说在爬取数据时,需要用户登录。回顾之前的代码,我想是保存cookie这种方法是不能用了。必须找到一种新的方法来模拟登录网站。查了许多资料,数据捉取无外乎有3种方法:1.直接抓取数据。 2.模拟浏览器抓取数据。 3.基于API接口抓取数据

综合分析,我决定用第2种方法"模拟浏览器登录",那得找好相应的python包,网上有:mechanize,selenium等等。

1.mechanize包的尝试

br.select_form(nr = 0) # Find the login form

br['vb_login_username'] = '你的用户名'

br['vb_login_password'] = '你的注册密码'

这段代码中老是遇到问题,第一,select_form中的nr怎么找,第二,在人人贷网站源代码中如何找所谓的'vb_login_username','vb_login_password'的专有名词。
其实我在代码测试中还是找到对于的nr=0,但是找了好久找不到对应的'vb_login_username'。(个人不太懂html,学的比较菜,有兴趣的可以尝试一下)。后来听朋友说可以试试selenium。

前面废话说了一大堆,都是我学的比较菜,也就是我的经验之谈。

2.selenium包的尝试(重点)

首先你得安装好它,直接pip install selenium即可。而且还要下载相应的浏览器驱动(这里我的运行环境是linux,python好像是3.0以上的,浏览器是firefox)

驱动的下载地址为https://github.com/mozilla/geckodriver/releases(下载好自己系统的版本),然后放到相应的PATH路径中,否则找不到driver。

Window下驱动的放置位置:

  将geckodriver.exe复制到C:\Program Files (x86)\mozilla firefox目录下;
  并在环境变量Path中添加路径:C:\Program Files (x86)\mozilla firefox;
  重启cmd,再次运行即可;
    

Linux下驱动的放置位置:

   解压后将geckodriver存放至 /usr/local/bin/ 路径下即可
   sudo mv ~/Downloads/geckodriver /usr/local/bin/

相应代码如下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import pandas as pd
import re
import numpy as np
from bs4 import BeautifulSoup driver = webdriver.Firefox() def LoginRRD(username, password):
try:
print(u'准备登陆人人贷网站...')
driver.get("https://www.we.com/loginPage.action")
elem_user = driver.find_element_by_name("j_username")
elem_user.send_keys(username)
elem_pwd = driver.find_element_by_name("j_password")
elem_pwd.send_keys(password)
elem_rem = driver.find_element_by_name("rememberme")
elem_rem.submit()
time.sleep(1) #这里设置睡眠时间,是为了使浏览器有时间保存cookies
print(u'登录 successful!') except Exception as e:
print("Error:", e)
finally:
print(u'End Login!\n') def parse_userinfo(loanid):#自定义解析借贷人信息的函数
urll="http://www.we.com/loan/%s" % loanid
#这个urll我也不知道怎么来的,貌似可以用urll="http://www.we.com/loan/%f" % loanid+timestamp (就是页面本身 driver.get(urll)
html = BeautifulSoup(driver.page_source,'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('loanId2.csv') #loanId是之前散标数据中的loanId,将其单独整理为一个csv文档
loanId=rrd.ix[:,'loanId']
user_info = ['昵称', '信用评分', '年龄', '学历', '婚姻', '申请借款', '信用额度', '逾期金额', '成功借款', '借款总额', '逾期次数','还清笔数', '待还本息', '严重逾期', '收入', '房产', '房贷', '车产', '车贷', '公司行业', '公司规模', '岗位职位', '工作城市', '工作时间'] table = pd.DataFrame(np.array(user_info).reshape(1, 24), columns=user_info)

#帐号密码的话,你自己用手机在人人贷网上申请
username = ""
password = u"" LoginRRD(username, password) i = 1
for loanid in loanId:
table = pd.concat([table, parse_userinfo(loanid)])
print(i)
i += 1 #看一下循环多少次 table.to_csv('userinfo2.csv',header=False)

相应数据图展示:

PS:
  其中'loanId2.csv'是之前博客(http://www.cnblogs.com/Yiutto/p/5890906.html)爬取整理的loanId,只有通过loanId才能爬取借贷人信息。

  后来运行上述代码大概爬了3000多条就中断了(应该是同一ip访问过多的问题),如果需要大量数据的可以考虑分批爬取,多台电脑同时进行。

  欢迎打赏点赞,如有需要转载,请附属作者源地址。当然运行代码遇到问题可以@我。

人人贷网的数据爬取(利用python包selenium)的更多相关文章

  1. 移动端数据爬取和Scrapy框架

    移动端数据爬取 注:抓包工具:青花瓷 1.配置fiddler 2.移动端安装fiddler证书 3.配置手机的网络 - 给手机设置一个代理IP:port a. Fiddler设置 打开Fiddler软 ...

  2. 小爬爬5:重点回顾&&移动端数据爬取1

    1. ()什么是selenium - 基于浏览器自动化的一个模块 ()在爬虫中为什么使用selenium及其和爬虫之间的关联 - 可以便捷的获取动态加载的数据 - 实现模拟登陆 ()列举常见的sele ...

  3. Web Scraper——轻量数据爬取利器

    日常学习工作中,我们多多少少都会遇到一些数据爬取的需求,比如说写论文时要收集相关课题下的论文列表,运营活动时收集用户评价,竞品分析时收集友商数据. 当我们着手准备收集数据时,面对低效的复制黏贴工作,一 ...

  4. 芝麻HTTP:JavaScript加密逻辑分析与Python模拟执行实现数据爬取

    本节来说明一下 JavaScript 加密逻辑分析并利用 Python 模拟执行 JavaScript 实现数据爬取的过程.在这里以中国空气质量在线监测分析平台为例来进行分析,主要分析其加密逻辑及破解 ...

  5. Python爬虫 股票数据爬取

    前一篇提到了与股票数据相关的可能几种数据情况,本篇接着上篇,介绍一下多个网页的数据爬取.目标抓取平安银行(000001)从1989年~2017年的全部财务数据. 数据源分析 地址分析 http://m ...

  6. Ajax数据爬取

    Ajax的基本原理 以菜鸟教程的代码为例: XMLHTTPRequest对象是JS对Ajax的底层实现: var xmlhttp; if (window.XMLHttpRequest) { // IE ...

  7. Python爬虫入门教程 11-100 行行网电子书多线程爬取

    行行网电子书多线程爬取-写在前面 最近想找几本电子书看看,就翻啊翻,然后呢,找到了一个 叫做 周读的网站 ,网站特别好,简单清爽,书籍很多,而且打开都是百度网盘可以直接下载,更新速度也还可以,于是乎, ...

  8. 基于 PHP 的数据爬取(QueryList)

    基于PHP的数据爬取 官方网站站点 简单. 灵活.强大的PHP采集工具,让采集更简单一点. 简介: QueryList使用jQuery选择器来做采集,让你告别复杂的正则表达式:QueryList具有j ...

  9. Scrapy 框架 CrawlSpider 全站数据爬取

    CrawlSpider 全站数据爬取 创建 crawlSpider 爬虫文件 scrapy genspider -t crawl chouti www.xxx.com import scrapy fr ...

随机推荐

  1. Vue.js 相关知识(组件)

    1. 组件介绍 组件(component),vue.js最强大的功能之一 作用:封装可重用的代码,通常一个组件就是一个功能体,便于在多个地方都能调用该功能体 根组件:我们实例化的Vue对象就是一个组件 ...

  2. 点斜杠 & 如何查看linux程序安装位置 dpkg -L yyy

    方法1: sudo find / -name ssh 方法2: Ubuntu下 看应用程序安装路径的方法 ubuntu下dpkg -L xxx看应用程序安装路径 1.点斜杠 “./”就代表在当前目录下 ...

  3. 亚马逊的客户服务和承诺 - Delay in shipping your Amazon.com order - Missed Fulfillment Promise

    We encountered a delay in shipping your order. We apologize for the inconvenience. Since your packag ...

  4. 对React children 的深入理解

    React的核心为组件.你可以像嵌套HTML标签一样嵌套使用这些组件,这使得编写JSX更加容易因为它类似于标记语言. 当我刚开始学习React时,当时我认为“使用 props.children 就这么 ...

  5. WebGL学习笔记五

    本章主要是对纹理的进一步讲解,我们很多时候需要将现实中已有 的图片在网页中展示出来而不是去创造图片,通过纹理 我们可以将光栅化的图形和图片纹理形成映射并且将图片在图形 中显示出来.基本过程与前几章一致 ...

  6. NetFPGA-SUME下reference_nic测试

    Reference_nic Reference_nic是NetFPGA-SUME中提供的一个参考Demo,本文主要介绍如何构建并在SUME上运行reference_nic. GIT源 git clon ...

  7. 深入理解JAVA I/O系列二:字节流详解

    流的概念 JAVA程序通过流来完成输入/输出.流是生产或消费信息的抽象,流通过JAVA的输入输出与物理设备链接,尽管与它们链接的物理设备不尽相同,所有流的行为具有相同的方式.这样就意味一个输入流能够抽 ...

  8. 【Leetcode】143. Reorder List

    Question: Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You ...

  9. 基于 Jmeter 的 web 端接口自动化测试平台

    简介 基于之前的react+unittest+flask的接口自动化平台开发经验,和趟过的坑,我重新开发了这个接口自动化平台.平台前端采用的antd+dva+umi的antd-pro模板,结合平台业务 ...

  10. Eclipse中设置新创建文件的默认编码格式

    window-prefenences-web-jsp(或者是其他文件格式,里面是一个列表) 找到之后点击,在右侧区域中选择encoding进行修改即可,然后应用,OK