从零开始爬虫系统学习Day1——2021.2.19

从零开始爬虫系统学习Day1——2021.2.19

前言

回顾

  • 2020年是非常值得回顾的一年,尤其是在7-10月期间,我参加了*部第一研究所的实习,由于疫情原因和保密原因,我既不能去参加实习前的培训,也无法看到任务书。于是面对描述简约的课题,只能从头开始一点一点自己来。最后虽然顺利完成了,但由于时间紧迫,并没有打好基础,一些理论(例如交互原理等)并没有打好,完成的项目就好像新建的豆腐渣大楼,而且地基也并未打好。
  • 这也是为什么开始这次“从零开始爬虫系统学习”的记录,一来是“打好地基”,而来是希望自己能养成“事前分析,事后记录”的好习惯。

题外话

大学这四年啥都学了,而当自己尝试回忆或者去用的时候,发现能记住的都是落在笔头上的和零零散散在各大论坛发过帖子的。希望自己能养成记录的好习惯,也希望现在开始能及时补救漏洞。(不得不说,CSDN的MARKDOWN编辑模式是最舒服的)

今日记录:HTML的简单解析与书写规范

标准库urllib及使用规范

urllib提供的功能就是利用程序去执行各种HTTP请求,其中包含了各种各样的模块,最为被熟知和使用的就是urllib.request,使用方法是:

from urllib.request import xxx

其中xxx表示需要从request模块中调用的功能,例如当我们想获取某个页面的HTML文件里的所有内容,可以使用urlopen去获取:

from urllib.request import urlopen

html = urlopen('http://xxxx/xxx/xx.html')
print(html.read())

当然,如果你需要用到request里的多种函数,可以这样

from urllib import request
request.xxx ...............

但每次用到具体功能的时候都要以request.xxx的形式使用。原因很简单,函数从属于模块模块从属于import声明什么只能用什么。

Beautiful Soup,每个人都离不开这碗“汤”

HTML通过标签分级分层。现如今HTML内容十分庞杂,个人想从中获取有用信息的第一步就是要想办法拆分。而Beautiful Soup可以通过识别标签以及调用解析器来完成拆分并获取指定标签里的内容:

from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen('http://xxx/xx/xx.html')
bs = BeautifulSoup(html.read(), 'html.parser')
print(bs.h1)

Beautiful Soup也可以直接调用urlopen,可以无需使用.read()

from urllib.request import urlopen
from bs4 import BeautifulSoup

bs = BeautifulSoup(html, 'html.parser')
print(bs.h1)

事实上,网页的HTML由于书写不规范、版本不一等问题,往往可能会影响对标签的识别。这时候需要我们对解析器进行调整,尝试用的解析器有三个,分别是“html.parser”、“lxml”以及“html5lib”,对应 BeautifulSoup(xxx,‘xxx’ )传入的第二个参数,这三个解析器的对比是这样的:

解析器名称 是否需要外部依赖 是否依赖第三方C语言库 容错度 运行速度
html.parser 整洁少错代码 最快
lxml 杂乱少错代码 中等
html5lib 混乱有错代码 最慢
上一篇:爬虫学习day2


下一篇:Netty性能优化