人人贷网的数据爬取(利用python包selenium)
记得之前应同学之情,帮忙爬取人人贷网的借贷人信息,综合网上各种相关资料,改善一下别人代码,并能实现数据代码爬取,具体请看我之前的博客: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×tamp=" % 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)的更多相关文章
- 移动端数据爬取和Scrapy框架
移动端数据爬取 注:抓包工具:青花瓷 1.配置fiddler 2.移动端安装fiddler证书 3.配置手机的网络 - 给手机设置一个代理IP:port a. Fiddler设置 打开Fiddler软 ...
- 小爬爬5:重点回顾&&移动端数据爬取1
1. ()什么是selenium - 基于浏览器自动化的一个模块 ()在爬虫中为什么使用selenium及其和爬虫之间的关联 - 可以便捷的获取动态加载的数据 - 实现模拟登陆 ()列举常见的sele ...
- Web Scraper——轻量数据爬取利器
日常学习工作中,我们多多少少都会遇到一些数据爬取的需求,比如说写论文时要收集相关课题下的论文列表,运营活动时收集用户评价,竞品分析时收集友商数据. 当我们着手准备收集数据时,面对低效的复制黏贴工作,一 ...
- 芝麻HTTP:JavaScript加密逻辑分析与Python模拟执行实现数据爬取
本节来说明一下 JavaScript 加密逻辑分析并利用 Python 模拟执行 JavaScript 实现数据爬取的过程.在这里以中国空气质量在线监测分析平台为例来进行分析,主要分析其加密逻辑及破解 ...
- Python爬虫 股票数据爬取
前一篇提到了与股票数据相关的可能几种数据情况,本篇接着上篇,介绍一下多个网页的数据爬取.目标抓取平安银行(000001)从1989年~2017年的全部财务数据. 数据源分析 地址分析 http://m ...
- Ajax数据爬取
Ajax的基本原理 以菜鸟教程的代码为例: XMLHTTPRequest对象是JS对Ajax的底层实现: var xmlhttp; if (window.XMLHttpRequest) { // IE ...
- Python爬虫入门教程 11-100 行行网电子书多线程爬取
行行网电子书多线程爬取-写在前面 最近想找几本电子书看看,就翻啊翻,然后呢,找到了一个 叫做 周读的网站 ,网站特别好,简单清爽,书籍很多,而且打开都是百度网盘可以直接下载,更新速度也还可以,于是乎, ...
- 基于 PHP 的数据爬取(QueryList)
基于PHP的数据爬取 官方网站站点 简单. 灵活.强大的PHP采集工具,让采集更简单一点. 简介: QueryList使用jQuery选择器来做采集,让你告别复杂的正则表达式:QueryList具有j ...
- Scrapy 框架 CrawlSpider 全站数据爬取
CrawlSpider 全站数据爬取 创建 crawlSpider 爬虫文件 scrapy genspider -t crawl chouti www.xxx.com import scrapy fr ...
随机推荐
- JavaScript中数组中遍历的方法
前言 最近看了好几篇总结数组中遍历方法的文章,然而"纸上得来终觉浅",决定此事自己干.于是小小总结,算是自己练手了. 各种数组遍历方法 数组中常用的遍历方法有四种,分别是: for ...
- web09 struts2配置 struts2入门
电影网站:www.aikan66.com 项目网站:www.aikan66.com游戏网站:www.aikan66.com图片网站:www.aikan66.com书籍网站:www.aikan66.co ...
- Task 6.2冲刺会议十 /2015-5-23
今天是第一个冲刺阶段的最后一天,主要把做出来的程序进行了初步的测试,在一台笔记本上运行程序,摄像头可以工作也能听到声音和麦克多的运转也还可以,两台计算机同时在一个局域网中通信的时候也可以实现.不过后续 ...
- Chapter 11 软件演化
软件一直在不断地演化发展,人们通常通过软件维护和软件再工程解决软件的缺陷.软件维护可以分为改正性维护.适应性维护和完善性维护几种类型.软件维护受开发过程影响大.软件维护困难大.软件维护成本高.软件维护 ...
- Java基础第一节.Java简介
第一节 Java简介 Java是一个由Sun公司开发而成的新一代的编程语言. Java语言是对软件开发有深远影响.应用前景广泛.具有丰富的类库.继承了C++的传统(摈弃了某些不足)广泛使用的网络编程语 ...
- 利用python进行简单的图像处理:包括打开,显示以及保存图像
利用python进行简单的图像处理:包括打开,显示以及保存图像 利用PIL处理 PIL(python image library) 是python用于图片处理的package.但目前这个package ...
- week3b:个人博客作业
vs2013的初步使用 由于自己在写这篇博客的时候已经把vs2013安装完毕,就我写了. 这是2013的使用步骤 第一步 注释 箭头指的方向是“点击” 第二步 第三步 第四步 第5步 第六步 最后点击 ...
- 在win7 64位操作系统下 arduino驱动安装问题的解决
主要参考以下两个博客: 操作教程:http://blog.csdn.net/u013926582/article/details/24442583 文件下载:http://www.arduino.cn ...
- Java Head First & 多态
package com.cwcec.tag; class Fruit { } class Apple extends Fruit{} class Animal { public Fruit eat(F ...
- [BUAA2017软工]个人作业week-1
一.快速看完整部教材,列出你仍然不懂的5到10个问题,发布在你的个人博客上. 1.在第二章个人技术和流程,邹欣老师提到了一张表格,主要解释了效能分析的一些名词,其中有这么几个概念: 调用者:函数Foo ...