分享好友 最新资讯首页 最新资讯分类 切换频道
适合零基础 Python爬虫数据采集的4种方式
2024-12-28 19:59

一般情况下以下四种方式都是可以匹配到结果的,只是复杂程度不一致,根据情况进行选择。

  • 正则re的使用
  • bs4 的使用
  • xpath
  • PyQuery

① Re(Regular Expression 正则表达式)速度快效率高准确性高,但使用起来可能相较于其他两种方法会更加的复杂多变,要学习的一些符号规则也会多一点。

② bs4(Beautiful Soup)最简单但执行起来效率并不高,它的原理是通过对HTML的标签、属性以及属性值来进行定位的。

③ xpath 语法规则比较舒服,使用起来效率更高更容易上手,xpath是在XML文档中搜索内容的一门语言课,也是现在爬虫用的比较多的一种解析数据的方式。

④ PyQuery 如果你熟悉 jQuery,又不想再记一套 BeautifulSoup的调用方法,那么 PyQuery 是个很好的选择。

不过上手爬虫的前提还是需要会点Python的哈,没有基础的话也很难理解下面讲到的一些知识点应用。

这里收藏了一篇零基础初学Python实用的学习建议和方法,以及适合新手学习的免费课程,大家要是感兴趣的话,可以点击跳转到下面的这篇文章看看↓↓↓

1、正则re的使用

我们在解析数据时一般会用到几个常用的函数

(1)re.find() re.findall()

一个是找到一个便返回值,另一个是找到所有符合条件的值,里边的参数都是“pattern”,“字符串文本”。

re.findall()

 

运行结果:[‘1’, ‘2’, ‘3’],匹配所有符合规则的字符。

(2)re.match() re.search() :

一个是从头开始匹配,一个是从任意位置开始匹配

re.match

 

运行结果:1

re.search

 

结果:1,从头到尾匹配字符,直到找到一个匹配,需要.group才能获取到匹配到的值。re.serach()和re.match()的区别,re.search()将匹配所有的字符,re.match只匹配字符串的开头,如果开头不符合规则,则返回None。

(3)re.complie() re.finder() 返回迭代器 re.sub() :替换

re.sub(pattern, repl, string, count,flag)

 

结果:||s|asdfa;用后面的字符替换前面的符合规则的字符。

利用最常用的方法compile()和findall()结合获取数据

 

注意观察compile()方法中的.?和(.?)

(.?)就是我们要获取的信息,.?是省略掉的信息

例如

html=“abcdabcd” p=re.compile(‘ab.*?<(.*?)>’) result=re.findall(p,html)

此时result中的 内容就是hello world。

需要注意的是result是列表信息,就是说我们可以保存多个数据(也就是说模板中可以有多个(.*?,而且只要html中符合模板中空缺的数据,都会全部保存下来。

这个方法的基本思想是利用compile()构造出一个模板然后利用findall()将构造的模板去跟我们爬取的数据对比,找出我们需要的数据,也就是我们自己设置的模板中的(.*?

补充:构建模板

  • 找到你爬取的网页,点击f12,查看网页原码
  • 找到你要爬取的信息在源码中的位置
  • 把那部分源码复制下来,观察你所需要的 信息,合理利用.?以及(.?)即可获取到你自己想要的信息

案例

 

2、bs4 的使用

使用 pip 安装即可

 

beautifulsoup导包

 
  • find 方法返回一个解析完毕的对象
  • findall 方法返回的是解析列表list
  • select 方法返回的是解析列表list
  • 获取属性的方法: get(‘属性名字’)
  • 和获取文本的方法: get_text()
  • 需要知道使用bs4时,需要指明解析器 一般是lxml
 

常用方法如下

 

3、xpath的使用

一般与lxml 一起使用

平日里最常用到的是xpath,因为xpath这种数据解析的通用性比较强,不止在Python中可以使用xpath,在其它的编程语言中也会使用。

xml库的安装

 

lxml的导包

 

lxml转换解析类型的方法:etree.HTML(text)

lxml解析数据的方法:data.xpath(“//div/text()”)

需要注意lxml提取完毕数据的数据类型都是列表类型

如果数据比较复杂

先提取大节点,在遍历小节点操作,把转化后的element对象转化为字符串,返回bytes类型结果 etree.tostring(element)

返回的是element对象可以继续使用xpath方法,对此我们可以在后面的数据提取过程中:先根据某个标签进行分组,分组之后再进行数据的提取。

发现结果是一个element对象,这个对象能够继续使用xpath方法:要注意的是 xpath的语法就变成了在此element的路径进行下一步的匹配 使用 https://blog.csdn.net/weixin_55154866/article/details/ (点斜杠) 表示当前路径。

 

属性匹配

匹配时可以用@符号进行属性过滤,例如匹配li下属性class为item-5的内容

 

文本获取

有两种方法:一是获取文本所在节点后直接获取文本,二是使用 //。

第二种方法会获取到补全代码时换行产生的特殊字符,推荐使用第一种方法,可以保证获取的结果是整洁的。

 

属性获取

@符号相当于过滤器,可以直接获取节点的属性值

 

属性多值匹配

某些节点的某个属性可能有多个值

 

多属性匹配

当前节点有多个属性时,需要同时进行匹配

 

4、什么是PyQuery

PyQuery是类似于jQuery的网页解析工具,是仿照 jQuery 实现的,语法与 jQuery 几乎相同。

使用jQuery的风格来遍历xml文档,它使用lxml操作html的xml文档,和解析库xpath与Beautiful Soup比起来更加灵活简便,且增加了添加类和移除节点的操作,这些操作有时会为提取信息带来极大的便利。

在使用之前,请先安装好qyquery库

使用如下终端命令安装

 

安装完成后导包

 

初始化

和Beautiul Soup一样,在初始化pyquery的时候,也需要传入html文本来初始化一个pyquery对象。

初始化的时候一般有三种传入方式:传入字符串、传入URL、传入html文件;最常用的初始化方式还是以字符串的形式传递。

  • 字符串初始化
 

首先引入PyQuery对象,取名为pq。然后声明一个长HTML字符串,并将其当作参数传给PyQuery类,这样就成功的进行了初始化。

接下来将css选择器作为参数传入初始化对象,在这个示例中我们传入li节点,这样就可以选择所有的li节点.。

  • URL初始化

将URL作为参数传入初始化对象

 

运行上面的代码你会发现,我们成功的获取到了百度的title节点和网页信息。

PyQuery对象会先请求这个URL,然后用得到的HTML内容完成初始化,这其实就相当于网页源代码以字符串的形式传递给初始化对象。

  • 文件初始化

传递本地文件名,将参数指定为filename即可。

 

一般来说,在网页里面我们需要获取的信息有两类:一类是文本内容,另一类是节点属性值。

  • 获取属性

获取到某个PyQuery类型的节点之后,就可以通过attr()方法来获取属性。

 

先获取class为list下面的class为item-0 active的节点下的a节点,这时变量a是PyQuery类型,再调用attr()方法并传入属性值href。

也可以通过调用attr属性来获取属性,输出结果与上面的代码是一样的

 

我们也可以获取到所有a节点的属性,示例

 

有一个需要注意的地方

如果代码这样写

 

运行之后,你会发现只获取到第一个a节点的href属性!这是需要注意的

  • 提取文本

提取文本与提取属性的逻辑是一样的,首先获取到class为PyQuery的节点,再调用text()方法获取文本。

首先来获取一个节点的文本内容

 

运行之后成功获取a节点的文本内容,接下来获取多个li节点的文本内容

 

该代码成功获取到了所有节点名称为li的文本内容,中间用空格隔开。

如果你想要一个一个获取,那还是少不了生成器的

 

节点操作

pyquery提供了一系列方法对节点进行动态修改,比如为某个节点添加一个class,移除某个节点,这些操作有时会为提取信息带来很大的便利。

  • add_class和remove_class
 

运行结果

 

上面有三段输出内容,首先先获取一个li节点,然后再删除active类属性,第三段代码是添加active类属性。

本文总结比较了4种爬虫采集数据的方法,每种方法都有自己的利弊,当然,在实际的问题中,并不是用的工具或方法越高级就越好,具体问题具体分析嘛~


爬虫平时小打小闹还可以,往深进阶学精还是很难的,这里分享一个同行大神的免费公开课给大家感受一下,有时间可以去看看,大神的经验挺丰富的,会分享一些项目实战的经验和思路,新手可以跟着学习。

传送门在下方↓↓

👉[[CSDN大礼包《python兼职资源&全套学习资料》免费分享]]安全链接,放心点击

【附:爬虫知识体系导图】

最新文章
外贸网站seo优化
外贸网站SEO优化是提升网站在搜索引擎中排名,以吸引更多潜在客户的关键策略。这包括关键词研究,确保网站内容与目标市场相关且
如何开发一个自动生成留言板的WordPress插件
如何开发一个自动生成留言板的WordPress插件在创造一个互动的网站时,一个留言板是不可或缺的。在WordPress平台上,为了方便用户
安智市场 6.6.9.7.1 官方版
加固信息:腾讯乐固(或腾讯支付)----------------------------应用权限(45)VIBRATE使用振动允许振动CAMERA拍照权限允许访问摄像
QS世界大学排名排名方法(qs世界大学排名 权威?)
QS世界大学排名排名方法(qs世界大学排名 权威?)很多朋友对这方面很关心,国际学校信息网整理了相关文章,供大家参考,一起来
华为新款手机推荐有哪些?
  这款手机的市场报价为2290元(价格来源于中关村手机频道,仅供参考)。华为P8应该是华为至今最具有贵族气质的手机,首先硬件上
此 Google 帐号尚未与设备关联。要安装应用,请先访问设备上的 Play 商店应用。 了解详情(已解决)
当你在谷歌Play商店想要下载一些手机应用时,经常会有跳提示: 此 Google 帐号尚未与设备关联。要安装应用,
淘宝宝贝类目是什么意思?
  淘宝开店之后,很多人都觉得自己知识不够用,比如对于一些淘宝的专业词汇很多人都不了解,淘宝宝贝类目很多人就不知道是什么
奔驰怎么关空调
在炎炎夏日,车载空调成为了驾驶者不可或缺的舒适配置。然而,对于许多奔驰车主来说,如何正确关闭车载空调可能并不是一件一目了
英雄联盟fps设置
英雄联盟作为一款备受欢迎的多人在线战术竞技游戏,在全球范围内拥有庞大的玩家群体。然而,随着游戏的不断更新和升级,一些玩家
华为 P10 (VTR-AL00 EMUI 8.0)手动root方法
华为 P10 (VTR-AL00 EMUI 8.0)手动root方法步骤1要想给手机刷入root权限,首先打开www.7to.cn,下载安装奇兔刷机软件,将 华为