之前小编提到过网络爬虫的风险,即保护个人数据/信息的重要性。
当然,小编这里不是要大家去爬取个人信息,而是因为有这样可能的存在,就越要保护好自己的隐私。
那么我们在爬取网页时如何找到对我们有效的信息呢?或者说,找到后我们又要如何通过Python将一系列的信息打印出来呢?
1.为何要对信息进行提取?
首先,在Python爬虫爬取网页时,是不能将整个网页信息打印出来的,至于为什么,看过网页源代码的就知道,按F12或者右键查看源代码(或者检查也可)可以看出来一个网页包含了很多信息,比如小编的个人博客源代码:
这其中便包含了前端HTML或者其它语言的代码,处理起来就会很繁琐,小编估计也没人这样做过。
在提取信息之前,我们先了解一下信息的标记,就好比自己家里有很多物品,为了让别人清楚它的作用,就用小纸条将各种物品的功能写在小纸条并贴在物品上面。
那么信息标记的好处也显而易见:
To:网页中HTML的信息标记: H:hyper
T:text
M:markup
L:language
HTML是www的信息组织形式:可以将声音,图像,视频等超文本信息嵌入到文本中。
HTML通过预定义的<>...<>标签形式组织不同类型的信息。
2.三种信息标记
国际公认的三种信息标记:XML,JSON,YAML
XML
XML:XML(extensible Markup Language):扩展标记语言,与HTML很接近的标准语言,采用了以标签为主的来构建信息、表达信息的方式。如:
<img scr="china.jpg" size="10">...</img> #img为名称,即Name
scr="china.jpg" size="10"是属性Attribute
<! >为注释
实例:
<person>
<first Name>tian</firstName>
<addres>
<streeAddr>湖南</streeAddr>
<city>长沙</city>
</address>
<prof>Com</prof>
</person>
HTML是先于XML出来,也可以说是XML是基于HTML发展而来。
JSON
JSON:JavsScript Object Notation
是由有类型的键值对构建的,如:key:value
实例:“name”:“北京” “name”:[“北京”,“湖南”]
当我们嵌套使用时:“name”:{“newname”:“北京”,“oldname”:“湖南”}
实例:
{
"first Name":"tian",
"addres":{
"streeAddr":"湖南"
"city":"长沙
},
"prof":["Com","ser"]
}
YAML
YAML:Yet Another Markup Language
无类型键值对key:value
如:name:北京
嵌套时,用缩进表示
特性:|表达整块数据 #表示注释 -表示并列关系
实例:
first Name:tian
addres:
streeAddr:湖南
city:长沙
prof:
-Com
-ser
3.三种标签形式的比较
信息标记形式的简单比较:
三种标签形式主流的比较以及用处:
4.信息提取的三种方法
1.完整解析信息的标记形式,再提取关键信息(解析)
需要标记解析器,例如:bs4库的标签树遍历。
优点:信息解析准确。
缺点:提取过程繁琐,速度慢。
2.无视标记形式,直接搜索关键信息。(搜索)
搜索:对信息发文本查找函数即可。
优点:提取过程简洁,速度较快。
缺点:提取结果准确性与直接信息内容相关。
3.融合方法(搜索+解析):
结合形式解析与搜索方法,提取关键信息。
需要标记解析器以及文本查找函数。
结合上述两种方法,为最佳选择。
Python爬虫系列,未完待续...