最新动态
爬虫实战(自用)requests模块、聚焦爬虫(数据解析)、selenium模块
2024-12-28 08:42
 
 
 
 

UA检测与UA伪装

UA:User-Agent(请求载体的身份标识
我们使用requess.get去请求网页就不再是以浏览器的身份去访问,而是以爬虫程序去访问,门户网站的服务器会检测对应请求的载体身份标识,如果检测到为某一款浏览器,这个请求会被当作正常用户请求。

但是,如果检测到不是基于浏览器访问,则被视为不正常请求(爬虫,则服务器很有可能拒绝该请求

所以我们一定要进行UA伪装 伪装成某一款浏览器。

 
 
 

比较翻译前后的url

 

它实际上是在你输入内容后进行局部页面刷新(不用你自己刷新)从而实现翻译。

从Content-Type可以看出响应数据的类型

Post和Get的区别(使用不同函数

实际上就是post是要携带用户信息的请求方式,get则是根据URL直接获取网页信息(即某个网址所包含的信息)。

post要获取的内容只靠网址是不能获取到的,需要提交一些额外的信息,这种信息在不同的网页中发挥不同功能。 例如在查询天气的网页,可能就是要输入城市信息;在登录某些网页时,又是账号和密码的载体。从这些可以看出get方法获取到的内容是稳定的(即每个人打开某个网页获得的信息相同),但是使用post需要输入特定信息,那么得到的网页内容就会有特异性。

post每次获取某个特定网页都需要输入额外信息,但get则直接输入URL即可(),这样也能看出post方法更加安全,因为额外信息不会直接暴露在网址上。

(百度翻译是post,因为需要我们向它传递dog这个数据,它才会返回值

 
 

在翻译dog的基础上,我们同样可以将dog设置成一个参数,通过我们传入的参数不同以达到获取不同单词的翻译结果。

动态化获取

 
 
 

进入这个网址:豆瓣

当滑动滚轮时,滑到底部的时候页面会进行刷新使得右边的滑块又跑到了中央,所以我们可以利用这次刷新进行数据收集。

我们也可以通过下图来获取具体的参数,直接复制到字典中存储即可。

 
 

(之后就是进一步的数据处理

 
 
 

动态加载

 

验证后发现,它并不是直接通过html实现数据的显示,可能是ajax实现,再进行验证。

但我们需要的是每一家企业的详情页中的所有信息,该如何处理呢

域名和id值进行拼接,拼接出一个完整的企业对应的详情页url。

注意:如果是post型,一定要记得传入参数!否则什么都得不到,因为post需要你向服务器提供数据,它才会返回相关的数据给你

我们先对具体的详情页面进行试验,发现可以进行爬取

 

接下来的任务就是将首页中获取的id与详情页面的url联系在一起,从而实现详情页的爬取

 
 
 
 

数据解析原理:使用数据解析,是因为有一些数据存在于标签之间或者在标签对应的属性值中。我们需要定位到具体标签的位置,或是标签相应的属性的位置,再获取标签中相关的数据。

大致有三类
1、正则(适用于多种语言
2、bs4(仅适用于Python
3、xpath(重要

编码流程变为
1、指定url
2、发起请求
3、获取相应数据
4、数据解析
5、持久化存储

 

步骤如下:先获取一整个页面,再对这个页面进行解析,获取其中的图片。

 
 
 

soup提供的用于数据解析的函数

1、soup.tagName(自己输入)
2、soup.find()

1)soup.find(‘div’)等同于soup.div

2)属性定位(根据具体属性定位到对应属性的标签
soup.find(‘div’,class_/id/attr=‘song’)(这里class要加下划线,不然会被当作关键字

3、soup.find_all()

find_all会返回符合要求的所有标签,用法同soup.find()

4、soup.select()

需要传入某种选择器(id、类、标签选择器,返回是一个列表

class选择器
标签选择器
id选择器

层级选择器

(大于号表示一个层级,也可以将大于号替换为空格,代表之间有多个层级

soup.select(’.tang > ul > li > a’):查找.tang类下的ul标签下的li标签下的a标签

 
 
 

获取标签中的文本数据

之前是定位到具体的标签,现在是利用定位到的具体标签来提取其中的数据。

soup.a.text/string/get_text(),用于读取文本数据

text/get_text():可以获取一个标签中的所有文本内容

string:只可以获取该标签下面直系的文本内容

我们上面想要的src不属于文本数据

获取标签中属性值

直接使用 [ 属性名 ]

 

我们成功从中提取到了src

 
 
 
 
 
 

最常用且最便捷高效的一种新方法,通用性。

xpath解析原理

1、实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中

2、调用etree对象中的xpath方法,结合着xpath表达式实现标签的定位和内容的捕获

如何实例化一个etree对象:from lxml import etree

1、将本地html文档重点源码数据加载到etree对象中
etree.parse(filePath)

2、可以将从互联网上获取的源码加载到该对象中
etree.HTML(‘page_text’)

xpath(‘xpath表达式’),返回一个列表

 

/ 表示从根节点开始,一个 / 表示一个层级,而//表示多个层级,或者表示可以从任意位置开始定位。(所有

属性定位

tagName[@attrName=“attrValue”]

 

索引定位

 

表示div标签下,类名为song下的p标签,可以在后面使用 [1] 索引,从1开始

取文本

 

取得,a标签下的文本内容。
/text(),获取的是标签中直系的文本内容

//text(),获取的是标签中非直系(所有的)文本内容

取属性

 

/@属性名 (/@src,获取img标签下的src属性

回顾一下,我们是怎么判断网页中的数据是否为动态加载

可以发现,如果使用像上面的方法进行查找的话,会比较耗时,我们就需要使用selenium模块

1、作用

1、它能帮助便捷的获取网站中动态加载的数据
2、便捷地使用模拟登陆

selenium是基于浏览器自动化的一个模块。(就是自动地使用浏览器的相关功能,让他自己去操纵浏览器,不用我们自己去弄

2、使用流程

驱动程序和版本要对应。对照表

再把驱动放在你项目的文件夹中。

 

用代码操纵你的浏览器

以药监局的例子为例

1、先操纵浏览器打开药监局的网站

 

2、获取浏览器当前页面的页面源码数据(公司名字

 

3、其他自动化操作(以淘宝搜索为例

 

如何向搜索框中传值呢

 
 
 
 

如何实现页面滚轮下滑效果呢

 
 

什么是iframe???
用于实现网页的嵌套。

如何定位的标签存在于iframe标签之中,直接寻找是寻找不到的

实现在iframe下的定位

 

模拟人操作鼠标,进行滑块的拖动

 
 
 
 
 
 
 
 

现在不能直接登录,需要进行滑块验证


    以上就是本篇文章【爬虫实战(自用)requests模块、聚焦爬虫(数据解析)、selenium模块】的全部内容了,欢迎阅览 ! 文章地址:http://www78564.xrbh.cn/quote/28081.html 
     动态      相关文章      文章      同类文章      热门文章      栏目首页      网站地图      返回首页 迅博思语移动站 http://www78564.xrbh.cn/mobile/ , 查看更多