爬虫 页面元素变化_爬虫 基本知识 萌新

3677cf47253d0a3bd6766235c6941d15.png

爬虫

定义

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

个人理解就是,从互联网上获取数据,进行自动化,规范化,也就是说,取代人去做繁重的数据采集。再者使用selenium等,可以模拟浏览器,写交互性的自动化脚本,本质都是解放人力

本质

```文本 本质上,爬虫就是获取网页,然后解析网页,最后得到开发者想要的数据。 这么说是不够正确的,或者说,只是爬虫常用的一部分,是对爬虫的一种浅显的理解,实际上,我感觉爬虫就像是模拟浏览器,但是却通过个人的分析,选择需要加载的去加载,获取想要获取的。

## 关键点
主要就是两个部分,一个就是定位数据(定位节点),另外一个就是从节点获取数据,或者模拟操作。关于对节点的定位,一种就是普通的通过特殊属性值等来筛选,另外一种就是通过父子节点,兄弟等关系进行推到,因为前端设计的时侯一般是分为几个部分去做的,而且渲染也是在特定的地方进行渲染,所以父子节点的关系,能够良好的对列表进行分析。## 工具
我个人是常用**python**写爬虫的类型,因为它有很多强大的库,而且性能也很不错。例如使用requests库,非常简单,方便,且强大。然后想要批量,高效率的进行爬虫,可以使用**Scrapy**
去进行项目式的开发,个人感觉是没有明确的界限,当你需要什么就用什么,不要局限于框架。
其次,**java**上的开发就没有那么方便,可能是因为我对java爬虫知之甚少吧。(常用jousp以及正则去进行html解析)## 关于pythonn爬虫
通过**requests**等库去获取网页,然后解析网页。
```解析的常用方法通过两类
1,是通过id,class,以及其他属性去进行锁定标签。然后提取数据。
2,是通过正则表达式去进行字符串匹配
个人感觉第一种简单,方便。但是第二种同样不可获缺,是必须要进行学习的东西,否则爬虫在某些情况可能回降低写程序的思路。

Scrapy爬虫框架

这个框架的最大优势就是非常的高效率,适用于对于一个网站的各个阶级的页面的爬虫。这些页面之间通常能够形成链式的关系。或者同层的关系
Scrapy多线程并发,效率极高。

关于反爬虫

对于部分网站是可以直接解析进行爬虫的,但是并不是全部,有些网站针对这种情况进行了防范 - 常见的防范办法是判断header请求头,IP,以及一些根据反映速度等等鬼才点子进行反爬虫。

所以要写一个好爬虫,就需要伪造,学会伪装自己,写好请求头,IP,以及控制反应速度等等。具体代码,可以自行百度

关于Selenium

这可以说是一个终极武器, 简单的来说,就是真正的去打开一个模拟器,然后加载网页,获取网页数据,

有好处也有坏处
好处是可以获取到更加全面的资源,跳过繁重的api接口分析。直接获取加载的数据。
坏处是不加以选择的加载数据,效率极低。

综上,虽然有缺点,但是还是挺有用的,至少能够进行方便的浏览器点击,输入等模拟操作,在进行操作自动化的时侯用处很大。

实现方法是次要的,重要的是思维方式,上层决定下层的运作

Seleniumd 的使用技巧

这里强推chrome加上selenium,效率杠杠的

首先解释一下,python是一门解释性语言

解释性语言定义:程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。现代解释性语言通常把源程序编译成中间代码,然后用解释器把中间代码一条条翻译成目标机器代码,一条条执行。

因为selenium的创建时十分耗时的,所以这并不方便于我们开发调试,比如点击某个按键等等。 综上,我们使用console进行开发测试:

8f8abc4869e51fba20f0bb1fc9248fa4.png

这样,可以比如先定位到某个元素,然后边解释,边执行,和juypter很像

同时,结合chrome去进行元素的定位 比如通过css_selector

content = browser.find_element_by_css_selector('#app > div > div.home-page.f-clear > div.home-container > div > div.center-panel > div.card-list > div.feed-card > div.content > div:nth-child(2) > div.main-content > div.card-content > div.post-content > div > div.text.p-rel.description > div')

0122fe09de4f2ce1781e5318eb3cb664.png

或者xpath(也就是dom树

browser.find_element_by_xpath()

4c1beda198fe2cbd30414b6fcaa08b96.png

爬虫的工具使用,chrome

最好用的工具之一,就像开发前端一样,可以通过这个查看获取了哪些资源,明白页面节点间的关系。狠方便。

使用搜索功能搜索数据 有写网站的数据不是直接静态的写载html中的,现在很多都是动态的用ajax等技术从后端获取,然后利用js渲染好节点数据。 所以怎样知道自己想要的数据在哪个端口呢。

  • 在html中查看数据节点的命名方式。(通常会保持一致)
  • 利用搜索工具搜索出想要信息,排查。

bff07faf5b0187dc24686297d1c604b9.png

关于数据定位

对于某些网站,他们的数据往往没有那么直观就能再html或者某个json接口中就直接找到,可能他们的数据格式不一样。经过了一定处理,比如四舍五入,或者统计计算(比如我碰到的东方财富网站)。这时候我们就需要对网站进行分析了。要了解其内部js是如何运算数据的,以及最后得出结果。 这里讲一个简单的,对dom树进行监控。这里检测dom树节点什么时候发生变化。

676ed8eeacb746960cdf18e3b2a7e01c.png

通过这样再元素那对节点进行监控,当节点改变时,就会debug:暂停

00d2def55110b6d776d26f027cc95375.png

这样就定位到了js如何变化

还有直接对js进行断点的,但是没有这个好用。

分布式,多线程等技术

使用这些批量的爬虫技术,主要是为了提高效率,因为时间很重要,要在规定时间内将数据又快又好的爬取出来。 - 我主要使用python里面的多线程,协程进行爬取,具体做法 协程博客 - 注意爬取的速度, 太快反而会导致错误 - 使用伪装

常用框架:scrapy

反爬虫

这也很重要,对于爬虫是不可或缺的。

分级层爬取,

尽量将数据存储到本地,哪怕其中部分不是我最终需要的数据,只要是中间过程的一步,在不影响整体速度的前提下,尽量将中间数据也存储到本地。

本地数据的读取速度是很快的,重要的是,减少目标服务器的压力。

确保数据整体的正确性

很多时候,我们并不能一次性就把握住某个接口的全部特性,那么我们需要尽量的多做测试,在拥有足够多的数据样本的情况下,去进行判断。

明白样本和整体的意义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 巧用逻辑运算符,php的神奇逻辑运算符

(小乖)今天再读php文档,看到逻辑运算符这边又发现了新天地呀,之前在探究c语言的逻辑运算符中,我们得到了一些结论而在php中,&& ||与and or 同时存在,并且表示的含义是一样,但是不同的是优先级接下来…

gateway sentinel 熔断 不起作用_Sentinel 1.8.0 年度版本发布,熔断降级重构升级

简介:在经过数月的打磨后,Sentinel 1.8.0 版本正式发布!该版本是本年度最重要的版本之一,包含大量特性改进与 bug 修复,尤其是针对熔断降级特性的完善升级(支持任意统计时长、慢调用比例降级策略、熔断器事…

python的getattr和setattr_getattr函数和setattr函数

python内置的两个看起来很简单,一般也不怎么用得上的函数,getattr函数和setattr函数。getattr函数用于获取对象的某个属性的值,setattr函数用于设置对象的某个属性值。getattr函数获取对象的某个属性值,如果属性不存在&#xff0c…

php mongodb排序查询,Mongodb 如何按照内嵌文档的某个字段排序?

现有数据如下{"_id" : ObjectId("5992c90beeb45634df1c2be4"),"name" : "测试数据1","status" : {"product" : [{"id" : ObjectId("59a37f7aef887a1d58b59f4f"),"sort" : 2},{&quo…

access设置0字段为null是因为类型转换失败_Apache Pulsar 2.6.1 版本正式发布:2.6.0 加强版,新增 OAuth2 支持

在 Apache Pulsar 2.6.0 版本发布后的 2 个月,2020 年 8 月 21 日,Apache Pulsar 2.6.1 版本正式发布!Apache Pulsar 2.6.1 修复了 2.6.0 版本中的诸多问题,改进了一些功能,新增了对 OAuth2 的支持,覆盖 Br…

英特尔显卡linux管理_英特尔 11 代酷睿大揭秘:这次全是大招

英特尔在今年九月份正式推出了第 11 代酷睿移动处理器,这次英特尔将 10 纳米 SuperFin 工艺全面带到移动处理器上,同时还有全新的 Willow Cove 内核、Iris Xe 显卡、全新的酷睿及英特尔标志。这次面向消费级市场的英特尔第 11 代酷睿移动处理器又有哪些变…

lnmp php文件访问不了,记一次lnmp环境下无法执行php文件

lnmp环境搭建好后却无法正常执行php文件,坑爹啊!~[错误状况]页面直接打印出php代码内容;php文件无法执行?;查看nginx配置文件:server { listen80;server_name xxxxx.com;access_log/var/log/nginx/xxxxx.ac…

c++矩阵类_面向对象有限元编程|单元类

单元对象是构成整个结构对象的基本要素,如杆单元,梁单元,板单元,壳单元等等。虽然单元形状和特性各不相同,但基本特征和功能是相同的。比如都具有一定的几何形状,通过节点与其它单元连接,包含材…

file 选择的图片作为背景图片_酷炫!用Python把桌面变成实时更新的地球图片

如何拥有够酷炫逼格够高的桌面?本文教你轻松定制自己的桌面背景(建议带上耳机听一下地球的声音)最近疯狂迷恋地球卫星图和地球的卫星视频,看上面的视频简直极度舒适。不禁想把这种图片作为桌面背景图。这就产生抓取其背景图片作为桌面的想法。思路其实很…

摇杆怎么映射到键盘_[评测]YAMAHA PSRSX900:雅马哈升级幅度最大的高端编曲键盘键盘中国原创评测...

本文图片均由本人亲自拍摄,转载请注明出处。年前就收到这台国行PSR-SX900了。在这一个月特殊的日子里,不能出门,幸好有sx900的陪伴,让我可以天天弹琴、唱歌打发时间...现在很多地方开始逐渐复工了,我抽时间写下了这一个…

微软黑屏补丁_慎装微软最新Win7补丁 部分用户更新补丁后无法关机

清波科技2月9日报道 使用微软windows系统的用户,对于蓝屏肯定不陌生,不过现在还有比蓝屏更可怕的系统故障:无法关机和重启。近日,在微软更新了一个最新的Win7补丁后,有部分用户反馈:在试图从开始菜单关机或…

php支持二级域名共享,PHP二级域名session共享方案

一般来讲网站都会有主站和子站,比如域名是linuxidc.com,那么一般来讲linuxidc.com和www.linuxidc.com就会是主站,而像bbs.linu一般来讲网站都会有主站和子站,比如域名是linuxidc.com,那么一般来讲linuxidc.com和就会是…

swift 滑动 iphone解锁_这10个iPhone隐藏功能,我就不信你全知道

Hi,大家好,我是爱倒腾电子产品的祈雨。从安卓阵营转到苹果已经快一年了,我从最初的束手束脚,到现在的乐得清闲,已经逐渐适应了苹果的这套系统。总的来说,安卓就像去吃自助餐:满眼的食物任你挑选…

hash hashcode变化_Web安全 | 没想到 Hash 冲突还能这么玩,你的服务中招了吗?

图 by: 石头背景 其实这个问题我之前也看到过,刚好在前几天,洪教授在某个群里分享的一个《一些有意思的攻击手段.pdf》,我觉得这个话题应该还是有不少人不清楚的,今天我就准备来“实战”一把,还请各位看官轻拍。洪强宁…

桶式排序 php,PHP实现桶排序算法

简单意义上的桶排序:桶排序的原理是先安排N1个桶作为容器,若数据范围为N的话。然后将测试数据(所需排序的数据)进行循环,放入对应的桶内。数据一定是在范围N内的。最后,循环桶里的元素,并且输出,进行从大到小或从小到大的排序。例如:我们的取值范围是10,那么就要定义…

c#养老院老人信息管理系统源码 论文_包河区【失智老人养老院】

包河区【失智老人养老院】,光明老年护理院广受好评,本着“为政府分忧、帮子女尽孝”的服务宗旨;以“你把老人托给我,我把放心送给你”的服务理念;针对社会上有病的、子女无暇照顾的老年人,提供“爱心、耐心、热心”等全方位关怀服…

php mysql 作业计划,关于php:我需要使用cron作业每30分钟恢复一次数据库(mysql)

我是cron jobs的新手,我需要每30分钟恢复一次数据库(mysql)。 是否有一个cron作业命令可以从已被gzip压缩的.sql文件中恢复数据库?或者我是否需要创建一个php脚本来执行此操作并创建一个cron作业来每30分钟调用一次这个脚本?此外,…

querywrapper 时间区间查询_雅思官方:关于增设用于英国签证及移民的雅思考试考点的通知!附20192020雅思考试时间安排...

接英国文化教育协会通知,为满足广大考生日益增长的报考需求,英国文化教育协会(雅思考试主办方)即日宣布,在南京财经大学(仙林校区)增设用于英国签证及移民的雅思考试考点,首场考试日期为2019年12月21日。考点具体信息如下&#xf…

scandall pro找不到扫描仪_吉林机箱风扇灯条找哪家

吉林机箱风扇灯条找哪家,阶新科技,合作理念--开诚布公,互相信任,团结奋斗。吉林机箱风扇灯条找哪家, 拆开机箱的前置面板可以看到前置面板中间带有长条形的叉戟灯条设计,这样也就导致前置的机箱风扇只能装在…

PHP8编译swoole出错,swoole自定义错误的方法

创建错误处理器实现ErrorHandlerInterface接口namespace App;use Core\AbstractInterface\ErrorHandlerInterface;class Test implements ErrorHandlerInterface{function handler( $msg,$file null,$line null,$errorCode null,$trace ){echo "文件{$file}的第{$line}…