2020/03/31 02-lxml爬取口碑榜和bs4基本概念

XPath是做xml和html解析的时候,最重要的技术之一,爬虫更需要的是如何解析查询回来的数据,爬取本身没什么难的发一个http请求,返回response就是了,response回来的有可能是html,有可能是json,文本信息我们关注,非文本不关注,更关注爬取的内容,被html包含之内的文本信息是要我们关注的。

**
我们前面生成的表格,表格的数据是我们关注的,表格标签不关注,只不过标签的是定位数据用的,在网页中如何定位你要的内容很重要。在爬取网站的用xhr,用ajax的方式去后台拿到了数据,这个是拿到了json数据,我们还需要解析json数据,但是更多的情况下,是拿到了html。
前面的方式正则表达式,css,XPath,这三种方法是最常用的方式**

在这里插入图片描述
这里也是一些最常用的语法
在这里插入图片描述
函数,轴,谓语条件,一般能用最简单的方式提取到函数就可以了,能不用轴就不用轴
在这里插入图片描述
编程的时候应该用lxml库,是python下功能比较丰富的库
在这里插入图片描述
看一下官网,底层封装了c的库
在这里插入图片描述
在这里插入图片描述
一般都从etree开始
在这里插入图片描述
在这里插入图片描述
装一下即可,因为是封装了底层的c的库,它的效率很高
在这里插入图片描述
看看能不能用
在这里插入图片描述
这两个元素对象能否看到

在这里插入图片描述
可以打印它的标签

在这里插入图片描述
在这里插入图片描述
这是元素对象,能否组合在一起,可以这样把另一个元素对象加入其中
在这里插入图片描述
append往往是在节点内部追加,打印tostring看看即可

在这里插入图片描述
也就是body开始,将它的html输出
在这里插入图片描述
这就是我们定义好的
在这里插入图片描述
打印body就只剩下body了,从谁开始输出

在这里插入图片描述
**在body也可以append,body里追加这些元素
**
在这里插入图片描述
从root来看
在这里插入图片描述
元素之间也有其他方式,比如子,要写清楚相对于谁的子

在这里插入图片描述
相对于body的子,顺便看看返回的类型是否是元素
在这里插入图片描述
这个tag就是创建好的子元素

在这里插入图片描述
可以试试链式编程,在里面append,这个时候顺便把子元素造出来,直接在内部追加

在这里插入图片描述
现在就 打印好了,2里面2-1
在这里插入图片描述
可以用漂亮打印的方式

在这里插入图片描述
在这里插入图片描述
需要decode转一下,转成string,可以用它来构造一个xml
在这里插入图片描述
构建一个xml

在这里插入图片描述
还提供两个非常有用的东西,html,一个叫path。
在etree调用HTML,里面放入一些文本(标签字符串或者由你读回来的html文本),就可以解析,返回一个根节点

在这里插入图片描述
由这个根节点开始向下,用xpath,然后xpath路径找相应的节点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这边的内容应该不是json过来的,左边是XHR,json数据过来的 在这里插入图片描述
可以在chrom装一个工具
在这里插入图片描述
在这里插入图片描述
打开开发者模式,加载已经解压缩的插件
在这里插入图片描述
我们可以对这个直接进行爬取
在这里插入图片描述
这个数据在这里
在这里插入图片描述
选择的内容正好在这个框子内,class可以理解为唯一的,因为不同的class要进行样式的控制
在这里插入图片描述】这里找div有class属性的有295个,也就是几乎所有div都有class
在这里插入图片描述
现在就只有一个

在这里插入图片描述在这里插入图片描述我们还需要底下的内容

在这里插入图片描述
到下面找所有的a,这里是它帮我们取的内容,但是到这里其实我们取的是a标签,不是里面的内容
在这里插入图片描述
写爬虫就是要跟着网页变的,网页布局变了你的爬虫也需要变,否则爬不到东西
在这里插入图片描述
现在准备抓一个文件
在这里插入图片描述
在这里插入图片描述
看看400个
在这里插入图片描述
etree有个方法,我们把html送进去
在这里插入图片描述
得到一个节点,得到一个element

在这里插入图片描述
还可以打印下tag,说明拿到了html
在这里插入图片描述
拿到之后用XPath来解析,在root节点上找XPath,再次打印titles,看看信息,这样就可以拿到想要的内容
在这里插入图片描述
将所有文本节点返回,下面就是你遍历的问题

在这里插入图片描述
在这里插入图片描述
注意点,一定要修改user-agent,如果用爬虫,连续发起几百次请求,对方服务器可能就不乐意了
在这里插入图片描述
把它省去了也可以,写法有很多

在这里插入图片描述
找个td有class叫title,这样就更简单

在这里插入图片描述
但是有时候可能title很多
在这里插入图片描述
往往包住它的div是唯一的,底下的title可能不唯一

在这里插入图片描述
虽然案例小,但是这就是爬虫
在这里插入图片描述
对XPath的进一步包装,beautifulsoup4
在这里插入图片描述
这个文档很好
在这里插入图片描述
在这里插入图片描述
直接去安装即可

在这里插入图片描述
安装
在这里插入图片描述
创建个新的python文件试试
在这里插入图片描述
这么用,请你给第一个参数传markup,塞个标签即可,要一个标签字符串,或者给一个含有标签对象的文件对象fileobject,给一个文件对象,自己去里面取内容,把内容read出来后进行分析,beautifulsoup(也是做解析的)。
现在讲的都是爬到的东西如何分析,XPath是用lXML这个库来做提取内容,beautifulsoup是来做解析的,做html解析的。
第二个参数 features要指定解析器,用什么解析器来解析文件

在这里插入图片描述
一个是文件对象,一个是字符串,如何选择解析器是要注意的地方
在这里插入图片描述
可以不指定解析器,就依赖系统已经安装的解析器库了,不安装lxml 就用内建的,就是python的
在这里插入图片描述
,没有安装lxml就用内建的,这是python内建的标准库,执行速度一般,文档容错能力蛮强的,但是纠正是按照自己的想法来做的,纠正的能力很有限,但是也不会写错的html 在这里插入图片描述
lxml解析器,需要安装C库,python已经安装了
在这里插入图片描述
还有html5的lib,速度慢,容错性好
在这里插入图片描述
一般都用lxml,builder就是内建的解析器

在这里插入图片描述
指定解析器就换了,基本上在开发中都用这个解析器
在这里插入图片描述
在这里插入图片描述
测试的html
在这里插入图片描述
**beautifulsoup提供了4种对象,把html解析生成一个复杂的树形结构,将里面的内容解析成4种对象:
1.beautifulsoup
2.tag 标签对象
3.navigablestring 可以导航的string,文本对象,text,包括注释,包括文档 说明的一些信息,都是归类到navigablestring
4.comment 注释信息 <!-- --》 **
在这里插入图片描述
在这里插入图片描述

创建的beautifulsoup代表整个文档
在这里插入图片描述
tag对应标签
在这里插入图片描述
每个标签有自己的属性,常用的两个:
1.name:tag
2.attrs

在这里插入图片描述

class是可以写多个class,空格隔开,也是个多值字典,在这个值上用的列表,如果说要访问h3的就用这个方式
在这里插入图片描述
这样不行直接报错,需要指定编码

在这里插入图片描述
是编码格式不对,windows默认gbk,所以要用utf-8打开
在这里插入图片描述
先找一个p标签试试,只打印了一个p标签对象,它的特点是深度优先,遇到div钻进去,找到第一个p标签就返回,深度优先,往里面去的
在这里插入图片描述
id是通过一个字符串来表达在页面里是唯一的,最典型的多值是class
在这里插入图片描述
找到第一个就不往下找了,这个class就有一个列表

在这里插入图片描述
div找到第9行的就不往下找

在这里插入图片描述
返回的类型是tag

在这里插入图片描述
这个属于这个字符串表达,这种方式下很难找到它的兄弟

在这里插入图片描述
有点像xpath的意思,但是xpath等于贪婪的,满足条件的都会匹配出来,所以满足的太多了我们就需要加条件,加class=什么。id=什么

在这里插入图片描述

在这里插入图片描述
还可以这么用,问class=content的div,id是多少
在这里插入图片描述
问问class
在这里插入图片描述
这就跟字典的get方法一样,
在这里插入图片描述
attrs返回的是典型的字典
在这里插入图片描述
attrs是字典就可以写成这样

在这里插入图片描述
字典默认get拿不到就返回none,可以写默认值
在这里插入图片描述
第一个div是有id的
在这里插入图片描述
这种快捷的方式,就是把它当做容器看
在这里插入图片描述
这样就keyerror了

在这里插入图片描述
这种方式访问没有就抛出keyerror异常,有风险

在这里插入图片描述
把元素当字典,最终实现的还是把attrs上的字典应该如何去处理,既然是个字典,该keyerror就keyerror
在这里插入图片描述
除了拿属性还可以修改属性

在这里插入图片描述
第一个img可以看一下它的src

在这里插入图片描述
甚至还可以修改,都可以动态去修改

在这里插入图片描述
找不到就返回none

在这里插入图片描述
故意写个都没有的,标签在不在就返回none
在这里插入图片描述
一般不用上面的方式,只是去理解标签类型,属性以及访问方式

在这里插入图片描述
还有一种类型navigableString

在这里插入图片描述
h3现在是字符串表达形式

在这里插入图片描述
把里面的用string打印却不可以
在这里插入图片描述
p标签里面有文字就可以
在这里插入图片描述
a标签的string也打印一下
在这里插入图片描述
里面有文字可以用string,相当于读取里面的文字信息,相当于标签内部的文本信息

在这里插入图片描述
如果想要里面的信息就这么读取就行,第一个div下的p标签,这两个在标签属性结构是一个东西
在这里插入图片描述
还有一个类型注释对象
在这里插入图片描述
注释对象对应这段

在这里插入图片描述
一般都是从soup对象开始.标签就会去里面深度优先搜第一个标签,搜到之后可以访问属性,常用的属性有name和attrs,attrs有可能是多值属性,比如class,多值属性会返回一个列表。有快捷的访问方式,将自己的这些方法在自己的标签类上也实现了一遍,这样可以把标签本身当属性字典来用。
可以访问标签,找不到返回none,如果属性找不到看你用什么方式,如果【】中括号方式找不到就是keyerror。
还有个类型就是navigablestring,往往读取的都是文本信息内容,我们更关注标签内部有没有文本

在这里插入图片描述

发布了243 篇原创文章 · 获赞 6 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_42227818/article/details/105233629
今日推荐