| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 爬取私募排排网历史净值和破解加密数值 -> 正文阅读 |
|
[Python知识库]爬取私募排排网历史净值和破解加密数值 |
爬取私募排排网历史净值和破解加密数值? 近期爬取了私募排排网上的历史净值,写一下爬取过程中的一些心得体会。 ? 上面有很多的难点,例如直接利用selenium会被检测出反爬、爬取的数值被加密(页面上看到的和html中不一样,多了一些隐藏值)等等。爬取的方法主要就是selenium、正则、beautiful soup。这里先把这里使用的库导入。
总体流程:打开网页,然后登录,到达需要解析的页面,得到源码,然后破解加密,最后输出数据保存 在excel中。 一、开启网页? 有的网站直接使用selenium就可以开启,例如
但是在这里就会出现以下情况,那是因为如果直接开启网页,就会被发现是爬虫。 解决这个问题要使用以下代码
最后就能完美的开启网页了。 注意,这里设置开发者模式也是不可行的! 二、selenium定位元素解析网页? 在进入网页之后,就开始元素定位。selenium定位一共有八个name,id,link_text,partial_link_text,class_name,xpath,css,tag_name。其中最少也要掌握xpath或者css一种方法(使用这两种方法基本上能解决所有的定位)。 详细用法,可以访问我的另一篇文章,也是关于selenium爬虫,里面详细介绍了selenium八大定位的用法。手把手Selenium安装使用及实战爬取前程无忧招聘网站(一)_Panda4u的博客-CSDN博客 ? 在这里就讲讲selenium这里的用法,我使用的方法是xpath。 1. 输入账号和输入密码点击登录
补充: ? (1). 以后使用定位最好都用By(也就是以上的方法),而driver.find_element_by_xpath(),因 为后面的这种不利于封装。 ? (2). 元素定位是做什么的?我们为什么要定位元素?有什么用呢? ? 元素定位就是在html中找到我们在网页中看到内容对应的元素。找到之后可以使用鼠标事 事件和键盘事件,对网页进行人工模拟操作。在这里就是简单的键盘事件send_keys和鼠标 事件click。 2. 叉掉广告,网页后退
补充: ? (1). 注意这里必须要sleep几秒。那是因为登录过程需要时间加载,不然会报错。 ? (2). driver.back()是将当前页面返回上一级。那么driver.forward()前进到上一级。 3. 鼠标悬停点击自选鼠标悬停在用户上,然后点击自选进入网页。
这里的悬停操作就是定位用户然后使用ActionChains进行悬停,在悬停中找到自选并点击。 4. 解析网页? 经历以上的步骤就来到了我们需要爬取数据的页面了。我们需要的数据在每一个基金里面的历史净值。所以我们先要得到每一个基金的网址,然后进入网站里面进行处理。
这里使用了BeautifulSoup对page进行解析,然后使用select定位找到每个基金的网址和基金名称。 二、对每个基金处理? 经过上一步解析网页之后,得到每个基金的网站。现在循环处理这些网址,爬取数据。 1. 解析每个基金网页? 解析每个基金网页还是运用driver.get加载网页,利用page_source解析网页。
不过在page_source解析网页之前,有一个东西必须要注意! ? 那就是如果直接解析网页得到的历史净值只有一小部分,是因为历史净值是一个动态的,我们在解析之前需要利用selenium将历史净值这个内嵌框下滑到底,而且这个内嵌框是一个异步加载的(滑动完后,又会出来一段),使用需要多个滑动才能满足条件。 解决问题要点:首先得将历史净值点击,然后定位历史净值框。 如图已经定位到了内嵌框,下面就开滑动
注意 getElementsByClassName(“tbody”)[0] 这里是查找属性class的属性值为tbody,中的第一个元素(一定要带上后面这个0,因为返回的是一个集合。如果滑动的是4个元素就是后面就是3) 下面就是定位docment对象的方法,和css定位一样。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bDmkoTgO-1628908656748)(爬取私募排排网历史净值和破解加密数值.assets/image-20210808190751925.png)] 感兴趣可以看看JavaScript学习链接 2. 解密历史净值中的隐藏值(1)隐藏值原理? 经过上一步就得到了每个基金的网页,接下来就来开始解密。 ? 在解密前我们先来看看它是怎么加密的吧! 可以看到在html中存在着网页中没有的内容,这个就是加密。 说实话,在这里花费了不少的时间。我先来说说我的思路吧。
? 会发现网页上面不存在的值多了 font: 0/0 a 这个值。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hFAoQWnu-1628908656752)(爬取私募排排网历史净值和破解加密数值.assets/image-20210808201653244.png)] 当把 font: 0/0 a 这个边框不勾选了,就会发现网页中会有很多的值中间是有空格的,那么可以得出结论html中多出来的值并不是多余的,它也是存在网页中的,但是它被隐藏了。 然后我们就抓住在这个特点继续找下去。 ? 当我们发现 ENCODE_STYLE 对应的内容就是和找到的规律一样。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bZiFlEQr-1628908656753)(爬取私募排排网历史净值和破解加密数值.assets/image-20210808201017372.png)]
可以去验证,以m440e0为属性值去找元素,可以发现全是隐藏值。同理,m48eb7为属性值去找元素全是真实值。 结论:html中多出来的值并不是多余的,它也是存在网页中的,但是它被隐藏了。这些隐藏值以及真实值在ENCODE_STYLE属性中。所以只需要在ENCODE_STYLE中找存在font: 0/0 a的属性值,即为隐藏值。 (2)代码实现
定义一个函数,调用xpath解析的page_source,返回值为隐藏值的属性值。即类似于m440e0,m41fd7的值。 然后只需要将隐藏值对应的元素找出来就行了。
三、将所有数据写入excel? 最后再将净值日期和净值变动找到(这两个没有掺杂隐藏值,很简单就能找到),然后利用pandas写入excel中。
最后得到结果 四、总结? 本文主要是讲的selenium的一些基本操作,例如鼠标事件、键盘事件和鼠标悬停。然后就是解密隐藏值。 ? 我在这里遇见了很多的坑,思考了一个下午才把思路想到。我很庆幸在我最艰难的时候,没有说放弃,其实这次更大的收获是让自己对爬虫有更加深刻的见解。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 10:28:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |