python selenium爬虫

1 前言

博主是一名经管研究生,以自身经历为例。如今大学生写论文大部分都需要数据支撑来论证研究结果,数据除了从数据库直接下载外,有些是需要通过网络爬虫来获得。网络爬虫有很多方法,本文主要介绍selenium爬虫, 版本为python3.6。

2 爬虫

前几天有室友让我爬一个网址:

http://bank.jrj.com.cn/bankpro/data.shtml?type=1&wd=%D1%F8%C0%CF



要求是将所有产品的专业评级、购买信息、收益指标等信息整合成一个excel表格。

2.1 导包

python写代码需要导入一些模块。这里导入webdriver是为了驱动浏览器自动化。导入time模块是为了爬虫休眠,防止ip被封。导入pandas模块是为了将爬取的信息整合到excel表格里。

from selenium import webdriver
import time
import pandas as pd

没有下载包的,直接在cmd里输入这三行就行。

pip install selenium
pip install time
pip install pandas

2.2 发送请求

爬虫的一般流程为发送请求、获取响应内容、解析内容、保存数据四步。第一步是发送请求,我们需要进入这个网页,才能爬取数据。

chrome_driver=r"C:\Program Files (x86)\Google\Chrome\chromedriver.exe" #替换为你的谷歌浏览器驱动位置
bro=webdriver.Chrome()
bro.get('http://bank.jrj.com.cn/bankpro/data.shtml?type=1&wd=%D1%F8%C0%CF') #替换为你需要爬取的网址

这里需要先下载谷歌浏览器驱动,可以先打开谷歌浏览器,找到关于Chrome,查看谷歌浏览器版本,下载对应的驱动。
运行后就能看到桌面弹出谷歌浏览器,自动跳转到要爬取的网页。

2.3 爬取内容

本文将获取响应内容、解析内容这两步合并。这部分是本文的重点,需要仔细阅读。这里我们的思路是先爬取所有产品的网址,再进入每个产品网址爬取信息。
先用谷歌浏览器打开爬取的网站,点击F12,浏览器右边会弹出一个框框,再点击Ctrl+Shift+C,鼠标点击第一个产品的名称。可以看到这个href就是第一个产品的网址,也就是我们需要爬取的内容。

这里我们用xpath定位,教大家一个非常简单的定位方法,右键点击画圈位置,依次点击Copy,Copy full Xpath,粘贴到文本中。

/html/body/div[9]/div/div[3]/table/tbody/tr[1]/td[3]/a #第一个产品
/html/body/div[9]/div/div[3]/table/tbody/tr[2]/td[3]/a #第二个产品
/html/body/div[9]/div/div[3]/table/tbody/tr[4]/td[3]/a #第四个产品

可以看到,这几个产品的区别在tr处,规律是第n个产品,定位就是tr[n]。往下拉可以看到,该网址一页有20条产品信息,我们可以用for循环遍历第一页的所有产品信息,用get_attribute提取网址和产品名称。get_attribute参数根据需要提取内容的标签决定,这里产品网址前面的标签href=“http://”,所以提取网址get_attribute参数为"href"。用format进行字符串格式化,将值赋予到字符串中。

for j in range(20): #一页20条产品信息           url=bro.find_element_by_xpath("/html/body/div[9]/div/div[3]/table/tbody/tr[{}]/td[3]//a".format(1+j)).get_attribute("href") #产品网址name=bro.find_element_by_xpath("/html/body/div[9]/div/div[3]/table/tbody/tr[{}]/td[3]//a".format(1+j)).get_attribute("title") #产品名称time.sleep(1) #加1秒休眠

再用同样的方法,对比第一页第一个产品,第二页第一个产品,第四页第一个产品等等,可以看出定位一模一样,现在的问题便只有如何跳转到第二页了。
我们人为点击下一页,需要将网页拉到底部,看到下一页这个按钮才能点击,selenium也不例外。这里我们用bro.execute_script(‘window.scrollTo(0,document.body.scrollHeight)’)将网页拉到底部,再用bro.find_element_by_partial_link_text(“下一页”)定位到下一页这个按钮。partial_link_text()是模糊匹配,不用link_text精确匹配是因为网页中下一页后面跟了两个箭头,不用find_elements是因为Ctrl+F查到下一页这三个字在网页中是唯一的,再用click()就可以点击到下一页了。
最后我们点到最后一页,可以看到第59页只有11条产品信息,所以需要判断是否是最后一页,若是最后一页,则for j in range(11)。

urls=[]
titles=[]
for i in range(59):if i != 58:for j in range(20):url=bro.find_element_by_xpath("/html/body/div[9]/div/div[3]/table/tbody/tr[{}]/td[3]//a".format(1+j)).get_attribute("href")name=bro.find_element_by_xpath("/html/body/div[9]/div/div[3]/table/tbody/tr[{}]/td[3]//a".format(1+j)).get_attribute("title")sleep(1)print(url)urls.append(url)titles.append(name)bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')sleep(2)btn = bro.find_element_by_link_text("下一页")btn.click()else:for j in range(11):url=bro.find_element_by_xpath("/html/body/div[9]/div/div[3]/table/tbody/tr[{}]/td[3]//a".format(1+j)).get_attribute("href")name=bro.find_element_by_xpath("/html/body/div[9]/div/div[3]/table/tbody/tr[{}]/td[3]//a".format(1+j)).get_attribute("title")sleep(1)print(url)urls.append(url)titles.append(name)

注意:网页拉到页面底部后仍会加载信息,如果不加休眠可能会定位不到,因为此时页面底部的信息还没加载出来,会导致程序报错。
此时我们已经获得所有产品的网址了,接着我们打开网址,

用xpath的方法进行定位,专业评级中分数前面的标签是title,所以用get_attribute(“title”)提取。而购买信息和收益指标的数据前面没有标签,所以用text提取文字。随意点击几个产品,可以看出每个产品的综合评估、发行银行等信息的位置都是一致的。

zhpj=[] #综合评级
fxyh=[] #发行银行
sylx=[] #收益类型
for i in urls:bro.get(i)zhpj.append(bro.find_element_by_xpath("/html/body/div[9]/div/div[1]/div[2]/div/table/tbody/tr[2]/td[2]/i/i").get_attribute("title"))fxyh.append(bro.find_element_by_xpath("/html/body/div[9]/div/div[1]/div[3]/div/table/tbody/tr[1]/td[2]").text)sylx.append(bro.find_element_by_xpath("/html/body/div[9]/div/div[1]/div[4]/div/table/tbody/tr[1]/td[2]").text)

本文只部分展示综合评级,发行银行,收益类型三个数据的爬取,其他信息爬取原理一样。

2.4 保存数据

data=pd.DataFrame()
data['基金名称']=titles
data['综合评级']=zhpj
data['发行银行']=fxyh
data['收益类型']=sylx
data.to_excel('爬取到的数据.xlsx',index=False)

到这里就完成任务了!

完整代码

from selenium import webdriver
from time import sleep
import pandas as pdchrome_driver=r"C:\Program Files (x86)\Google\Chrome\chromedriver.exe"
bro=webdriver.Chrome()
bro.get('http://bank.jrj.com.cn/bankpro/data.shtml?type=1&wd=%D1%F8%C0%CF')
urls=[]
titles=[]
for i in range(59):if i != 58:for j in range(20):url=bro.find_element_by_xpath("/html/body/div[9]/div/div[3]/table/tbody/tr[{}]/td[3]//a".format(1+j)).get_attribute("href")name=bro.find_element_by_xpath("/html/body/div[9]/div/div[3]/table/tbody/tr[{}]/td[3]//a".format(1+j)).get_attribute("title")sleep(1)print(url)urls.append(url)titles.append(name)bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')sleep(2)btn = bro.find_element_by_link_text("下一页")btn.click()else:for j in range(11):url=bro.find_element_by_xpath("/html/body/div[9]/div/div[3]/table/tbody/tr[{}]/td[3]//a".format(1+j)).get_attribute("href")name=bro.find_element_by_xpath("/html/body/div[9]/div/div[3]/table/tbody/tr[{}]/td[3]//a".format(1+j)).get_attribute("title")sleep(1)print(url)urls.append(url)titles.append(name)
zhpj=[]
fxyh=[]
sylx=[]
for i in urls:bro.get(i)zhpj.append(bro.find_element_by_xpath("/html/body/div[9]/div/div[1]/div[2]/div/table/tbody/tr[2]/td[2]/i/i").get_attribute("title"))fxyh.append(bro.find_element_by_xpath("/html/body/div[9]/div/div[1]/div[3]/div/table/tbody/tr[1]/td[2]").text)sylx.append(bro.find_element_by_xpath("/html/body/div[9]/div/div[1]/div[4]/div/table/tbody/tr[1]/td[2]").text)
data=pd.DataFrame()
data['基金名称']=titles
data['综合评级']=zhpj
data['发行银行']=fxyh
data['收益类型']=sylx
data.to_excel('爬取到的数据.xlsx',index=False)

完整结果

python selenium爬虫相关推荐

  1. Python Selenium爬虫实战应用

    本节讲解 Python Selenium 爬虫实战案例,通过对实战案例的讲解让您进一步认识 Selenium 框架. 实战案例目标:抓取京东商城(https://www.jd.com/)商品名称.商品 ...

  2. python selenium爬虫实例_python使用selenium爬虫知乎的方法示例

    说起爬虫一般想到的情况是,使用 python 中都通过 requests 库获取网页内容,然后通过 beautifulSoup 进行筛选文档中的标签和内容.但是这样有个问题就是,容易被反扒机制所拦住. ...

  3. python selenium爬虫_详解基于python +Selenium的爬虫

    详解基于python +Selenium的爬虫 一.背景 1. Selenium Selenium 是一个用于web应用程序自动化测试的工具,直接运行在浏览器当中,支持chrome.firefox等主 ...

  4. python selenium爬虫代码示例_python3通过selenium爬虫获取到dj商品的实例代码

    先给大家介绍下python3 selenium使用 其实这个就相当于模拟人的点击事件来连续的访问浏览器.如果你玩过王者荣耀的话在2016年一月份的版本里面就有一个bug. 安卓手机下载一个按键精灵就可 ...

  5. python+selenium爬虫自动化批量下载文件

    一.项目需求 在一个业务网站有可以一个个打开有相关内容的文本,需要逐个保存为TXT,数据量是以千为单位,人工操作会麻木到崩溃. 二.解决方案 目前的基础办法就是使用python+selenium自动化 ...

  6. python selenium 爬虫 模拟浏览网站内容

    使用python selenium编写的爬虫代码,模拟用户浏览某个网站内容,废话少说进入正文. 1.爬虫界面如下: 界面使用说明: 第一步:填写要访问的网站地址 第二步:填写每天访问该网址的次数 第三 ...

  7. python+selenium爬虫按照名单循环爬取作者知网下载量等信息

    主要爬取下面的表格内的信息如文献篇数,被引用数等等 用的是selenium爬虫 from selenium import webdriver from selenium.common.exceptio ...

  8. python selenium爬虫需要账号和密码登陆的网页_如何使用selenium和requests组合实现登录页面...

    这篇文章主要介绍了如何使用selenium和requests组合实现登录页面,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.在这里seleniu ...

  9. 手把手教你Python+selenium爬虫百度文库源码+解析

    免费资源猫-爱分享的猫. 最近小编在弄python爬虫项目,可能大家一听爬虫,就觉得高大上,其实爬虫并没有多难,只要你稍微研究一下,掌握了基础的东西,后续爬虫就是重复利用的事情了.今天给大家来一下普及 ...

最新文章

  1. redis的导入导出需要特别注意的地方
  2. 【Java 网络编程】TCP 数据传输示例 ( 客户端参数设置 | 服务器端参数设置 | ByteBuffer 存放读取数据类型 )
  3. 数据库工程开发秘籍之TSQL 存储过程user stored procedure的概念与案例实战
  4. Spring JDBC和JdbcTemplate CRUD与DataSource示例
  5. 十字连接焊盘_PCB板上的那些“特殊焊盘 “到底起什么作用?
  6. 【linux】xx is not in the sudoers file 解决办法
  7. VALSE学习(十二):视频时序建模和动作识别
  8. 债市概览 | 一文梳理:债券发行、登记托管、交易与结算
  9. spring boot 应用设置session path_springboot整合redis实现分布式session
  10. 大数据应用于生活,目前主要应用在哪些领域?
  11. VMware Workstation Pro下载密钥
  12. linux系统下载7.0,redhat7.0_redhat enterprise linux 7.0下载 附安装教程 - 121下载站
  13. 电路设计_CAN总线基础知识
  14. python初学项目实战——名片管理系统(一)
  15. 计算机专业知识3,计算机专业知识试卷3
  16. 2160亿元电费如何降下来?地方5G“硬核”政策助力
  17. 高中计算机手抄报图片大全集,高中生手抄报版面图大全
  18. HashMap常见面试题汇总:建议初步了解源码后再细品
  19. HTML中将图片进行放大缩小
  20. PHP 开启 sockets

热门文章

  1. win10蓝屏无法进入系统_Win10 补丁又翻车!蓝屏卡顿崩溃,系统性能“负优化”...
  2. 【毕业设计】基于单片机的移动便携桌面加湿器 - 物联网 嵌入式
  3. 一、使用Python对word文档进行操作
  4. Python-OpenCV实现图片和视频相互转换的简单+实用方法(附代码)
  5. 求长方体的体积(C语言)(解决中文输出乱码)
  6. 【电脑技巧】windows11启动ie浏览器
  7. 人人宝靠谱吗,合规合法吗?
  8. 安卓期末大作业——Android日历备忘录
  9. Java笔记-实用类
  10. 2021年美国风险投资暴增200%!