Web数据获取01
Anaconda
Installing on Windows
https://docs.anaconda.com/anaconda/install/windows/
网络数据获取原理
HTTP协议
HTTP,Hypertext Transfer Protocol,超文本传输协议
HTTP是一个基于“请求与响应”模式的、无状态的应用层协议
HTTP协议采用URL作为定位网络资源的标识,URL格式如下:
http://host[:port][path]
host: 合法的Internet主机域名或IP地址
port: 端口号,缺省端口为80
path: 请求资源的路径
HTTP协议对资源操作
GET 请求获取URL位置的资源
POST 请求向URL位置的资源后附加新的数据
HTTP URL的理解:
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源
HTTP协议对资源的操作
通过URL和命令管理资源,操作独立无状态,网络通道及服务器成为了黑盒子
爬虫需要解决哪些问题:
HTTP请求怎么构造并向服务器发送获取数据?
如何大量从网络中获取数据?
获取到的数据如何解析为结构化数据?
如何高效的获取数据?
问题:
同步和异步,阻塞和非阻塞调用是?
网页为节点
网页中的HyperLink为有向边
Crawl == 图遍历, right?
检查某个URL是否已经被抓过了
在将一个新的URL (规格化后的)放到工作池之前
- 要很快,不要在这里形成性能瓶颈(检查将要访问磁盘)
符合条件(即未被访问过)的URLs放到crawler的任务中
优化方法
URL用fingerprint (如MD5)
来记录,减少内存开销
利用访问的时空局部性 – Cache
海量数据的高效率查找表
- B-tree
- Bloom filter
Bloom filter
Bloom Filter
就会告诉你,w在集合
之中,实际上这里是误报,w并不在集合之中
A high level view of a web crawler
- Fetcher:Fetch a page 取一个界面
- Extractor:get all urls in the former page 寻找其他url引用
- Writer:add the urls into the database
- PostProcessor:Read/Write URL’s
HTML通过预定义的<>…</>标签
形式组织不同类型的信息
信息标记与提取方法
信息的标记
信息标记的作用
- 标记后的信息可形成信息组织结构,增加了信息维度
- 标记的结构与信息一样具有重要价值
- 标记后的信息可用于通信、存储或展示
- 标记后的信息更利于程序理解和运用
信息标记的三种形式
XML(Extensible Markup Language)
Extensible Markup Language
空元素的缩写形式:
<img src=“china.jpg” size=“10” />
注释书写形式:
<!-- This is a comment, very useful -->
<name> … </name>
<name />
<!-- -->
JSON(JavsScript Object Notation)
JavsScript Object Notation
有类型的键值对 key:value
多值用[,]
组织:
键值对嵌套用{,}
:
YAML(YAML Ain’t Markup Language)
无类型键值对 key:value
缩进表达所属关系:
-
表达并列关系:
|
表达整块数据, #
表示注释
text: | # 学 校 介 绍
哈尔滨工业大学,简称哈工大,创建于1920年,隶属中华人民共和国工业和信息化部,是一所以理工为主,理、工、文、管、生命相结合,多学科、开放式的研究型高校,为中国C9联盟成员之一,是首批中国“211工程”、首批九所985工程重点建设的院校之一。拥有哈尔滨、威海和深圳三大校区,已建成一校三区的“大哈工大”格局。
三种信息形式的比较
XML | 最早的通用信息标记语言,可扩展性好,但繁琐 | Internet上的信息交互与传递 |
---|---|---|
JSON | 信息有类型,适合程序处理(js),较XML简洁 | 移动应用云端和节点的信息通信,无注释 |
YAML | 信息无类型,文本信息比例最高,可读性好 | 各类系统的配置文件,有注释易读 |
XML实例
<person>
<firstName>Tian</firstName>
<lastName>Song</lastName>
<address>
<streetAddr>中关村南大街5号</streetAddr>
<city>北京市</city>
<zipcode>100081</zipcode>
</address>
<prof>Computer System</prof><prof>Security</prof>
</person>
JSON实例
{
“firstName” : “Tian” ,
“lastName” : “Song” ,
“address” : {
“streetAddr” : “中关村南大街5号” ,
“city”: “北京市” ,
“zipcode” : “100081”
},
“prof” : [ “Computer System” , “Security” ]
}
YAML实例
firstName : Tian
lastName : Song
address :
streetAddr : 中关村南大街5号
city : 北京市
zipcode : 100081
prof :
-Computer System
-Security
信息提取的一般方法
从标记后的信息中提取所关注的内容
XML JSON YAML
(标记, 信息)
方法一:完整解析信息的标记形式,再提取关键信息
XML JSON YAML
需要标记解析器,例如:bs4库的标签树遍历
- 优点:信息解析准确
- 缺点:提取过程繁琐,速度慢
方法二:无视标记形式,直接搜索关键信息
搜索
对信息的文本查找函数即可
- 优点:提取过程简洁,速度较快
- 缺点:提取结果准确性与信息内容相关\
融合方法:结合形式解析与搜索方法,提取关键信息
XML JSON YAML 搜 索
需要标记解析器及文本查找函数
网络爬虫的限制
• 来源审查:判断User-Agent进行限制
检查来访HTTP协议头的User-Agent域,只响应浏览器或友好爬虫的访问
• 发布公告:Robots协议
Robots Exclusion Standard,网络爬虫排除标准
告知所有爬虫网站的爬取策略,要求爬虫遵守
• 网络爬虫:
自动或人工识别robots.txt,再进行
• 内容爬取 约束性:
Robots协议是建议但非约束性,网络爬虫可以不遵守,但存在法律风险
原则:类人行为可不参考Robots协议