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

  1. def parse_userinfo(loanid):
  2. timestamp=str(int(time.time())) + '%03d' % random.randint(0,999)
  3. urll="http://www.we.com/lend/detailPage.action?loanId=%.0f&timestamp=" % loanid+timestamp
  4. result = s.get(urll,headers=headers)
  5. html = BeautifulSoup(result.text,'lxml')
  6. info = html.find_all('table',class_="ui-table-basic-list")
  7. info1= info[0]
  8. info2 = info1.find_all('div',class_="basic-filed")
  9. userinfo = {}
  10. for item in info2:
  11. vartag = item.find('span')
  12. var = vartag.string
  13. if var == '信用评级':
  14. var = '信用评分'
  15. pf1 = repr(item.find('em'))
  16. value = re.findall(r'\d+',pf1)
  17. else:
  18. valuetag = item.find('em')
  19. value = valuetag.string
  20. userinfo[var]=value
  21. data = pd.DataFrame(userinfo)
  22. 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包的尝试

  1. br.select_form(nr = 0) # Find the login form
  2.  
  3. br['vb_login_username'] = '你的用户名'
  4.  
  5. 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/

相应代码如下:

  1. from selenium import webdriver
  2. from selenium.webdriver.common.keys import Keys
  3. import time
  4. import pandas as pd
  5. import re
  6. import numpy as np
  7. from bs4 import BeautifulSoup
  8.  
  9. driver = webdriver.Firefox()
  10.  
  11. def LoginRRD(username, password):
  12. try:
  13. print(u'准备登陆人人贷网站...')
  14. driver.get("https://www.we.com/loginPage.action")
  15. elem_user = driver.find_element_by_name("j_username")
  16. elem_user.send_keys(username)
  17. elem_pwd = driver.find_element_by_name("j_password")
  18. elem_pwd.send_keys(password)
  19. elem_rem = driver.find_element_by_name("rememberme")
  20. elem_rem.submit()
  21. time.sleep(1) #这里设置睡眠时间,是为了使浏览器有时间保存cookies
  22. print(u'登录 successful!')
  23.  
  24. except Exception as e:
  25. print("Error:", e)
  26. finally:
  27. print(u'End Login!\n')
  28.  
  29. def parse_userinfo(loanid):#自定义解析借贷人信息的函数
  30. urll="http://www.we.com/loan/%s" % loanid
  31. #这个urll我也不知道怎么来的,貌似可以用urll="http://www.we.com/loan/%f" % loanid+timestamp (就是页面本身
  32.  
  33. driver.get(urll)
  34. html = BeautifulSoup(driver.page_source,'lxml')
  35. info = html.find_all('table',class_="ui-table-basic-list")
  36. info1= info[0]
  37. info2 = info1.find_all('div',class_="basic-filed")
  38. userinfo = {}
  39. for item in info2:
  40. vartag = item.find('span')
  41. var = vartag.string
  42. if var == '信用评级':
  43. var = '信用评分'
  44. pf1 = repr(item.find('em'))
  45. value = re.findall(r'\d+',pf1)
  46. else:
  47. valuetag = item.find('em')
  48. value = valuetag.string
  49. userinfo[var]=value
  50. data = pd.DataFrame(userinfo)
  51. return data
  52.  
  53. rrd=pd.read_csv('loanId2.csv') #loanId是之前散标数据中的loanId,将其单独整理为一个csv文档
  54. loanId=rrd.ix[:,'loanId']
  55. user_info = ['昵称', '信用评分',
  56.  
  57. '年龄', '学历', '婚姻',
  58.  
  59. '申请借款', '信用额度', '逾期金额', '成功借款', '借款总额', '逾期次数','还清笔数', '待还本息', '严重逾期',
  60.  
  61. '收入', '房产', '房贷', '车产', '车贷',
  62.  
  63. '公司行业', '公司规模', '岗位职位', '工作城市', '工作时间']
  64.  
  65. table = pd.DataFrame(np.array(user_info).reshape(1, 24), columns=user_info)

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

相应数据图展示:

  1. 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. JavaScript中数组中遍历的方法

    前言 最近看了好几篇总结数组中遍历方法的文章,然而"纸上得来终觉浅",决定此事自己干.于是小小总结,算是自己练手了. 各种数组遍历方法 数组中常用的遍历方法有四种,分别是: for ...

  2. web09 struts2配置 struts2入门

    电影网站:www.aikan66.com 项目网站:www.aikan66.com游戏网站:www.aikan66.com图片网站:www.aikan66.com书籍网站:www.aikan66.co ...

  3. Task 6.2冲刺会议十 /2015-5-23

    今天是第一个冲刺阶段的最后一天,主要把做出来的程序进行了初步的测试,在一台笔记本上运行程序,摄像头可以工作也能听到声音和麦克多的运转也还可以,两台计算机同时在一个局域网中通信的时候也可以实现.不过后续 ...

  4. Chapter 11 软件演化

    软件一直在不断地演化发展,人们通常通过软件维护和软件再工程解决软件的缺陷.软件维护可以分为改正性维护.适应性维护和完善性维护几种类型.软件维护受开发过程影响大.软件维护困难大.软件维护成本高.软件维护 ...

  5. Java基础第一节.Java简介

    第一节 Java简介 Java是一个由Sun公司开发而成的新一代的编程语言. Java语言是对软件开发有深远影响.应用前景广泛.具有丰富的类库.继承了C++的传统(摈弃了某些不足)广泛使用的网络编程语 ...

  6. 利用python进行简单的图像处理:包括打开,显示以及保存图像

    利用python进行简单的图像处理:包括打开,显示以及保存图像 利用PIL处理 PIL(python image library) 是python用于图片处理的package.但目前这个package ...

  7. week3b:个人博客作业

    vs2013的初步使用 由于自己在写这篇博客的时候已经把vs2013安装完毕,就我写了. 这是2013的使用步骤 第一步 注释 箭头指的方向是“点击” 第二步 第三步 第四步 第5步 第六步 最后点击 ...

  8. 在win7 64位操作系统下 arduino驱动安装问题的解决

    主要参考以下两个博客: 操作教程:http://blog.csdn.net/u013926582/article/details/24442583 文件下载:http://www.arduino.cn ...

  9. Java Head First & 多态

    package com.cwcec.tag; class Fruit { } class Apple extends Fruit{} class Animal { public Fruit eat(F ...

  10. [BUAA2017软工]个人作业week-1

    一.快速看完整部教材,列出你仍然不懂的5到10个问题,发布在你的个人博客上. 1.在第二章个人技术和流程,邹欣老师提到了一张表格,主要解释了效能分析的一些名词,其中有这么几个概念: 调用者:函数Foo ...