组成:
- 调度器:调度URL管理器、下载器、解析器之间的协调工作
- URL管理器:包括待爬取的URL地址和已爬取的URL地址,防止重复爬取
- 网页下载器:下载网页,网页下载器有urllib 包括需要 登录、代理、和cookie,requests(第三方包)
- 网页解析器:解析 DOM 树,通过 正则表达式、html.parser、beautifulsoup、lxml
- 应用程序:从网页中提取的有用数据组成的一个应用
urllib
urllib.request | 用来打开和读取URLs的; |
urllib.request.urlopen(url) | 可以打开一个网站,读取并打印信息。 |
urllib.error | 包含一些有urllib.request产生的错误,可以使用try进行捕捉处理; |
urllib.parse | 包含了一些解析URLs的方法; |
urllib.robotparser | 用来解析 robots.txt 提供了一个单独的RobotFileParser类,通过该类提供的can_fetch()方法测试爬虫是否可以下载一个页面。 |
.quote / .unquote(url)
url编码解码
request.Request
request.Request(url, data, headers, origin_req_host, unverifiable, method)
其返回作为 urlopen 的参数可进行请求
request.urlopen(url)
request.urlopen(url, data, [timeout, ], cafile, capath, sslContext)
.geturl() | 返回 一个 url 的字符串 |
.info() | 返回 meta 标记的元信息,包括一些服务器的信息; |
.getcode() | 获取状态码 |
下列方式亦可获得状态码: |
try:
myURL2 = urllib.request.urlopen("https://www.runoob.com/no.html")
except urllib.error.HTTPError as e:
if e.code == 404:
print(404) # 404
beautifulsoup
BeautifulSoup(html, ‘lxml’).prettify() | 返回格式化的解析结果 |
.tag | 返回第一个对应标签 |
.tag.string | 返回第一个对应标签的innerHTML |
.find_all((tag, attrs, hasChild, string, **kwargs)) | 查找结果返回一个列表 |