听课笔记,中国大学mooc 《Python语言基础与应用》陈斌
目录
1. 网络爬虫
从互联网中,尤其是网页中自动化的收集和处理信息的这样的过程叫做网络爬虫。
2. 搜索引擎蜘蛛spider
(1)爬虫是按照一定规则,自动地提取并保存网页中信息的程序。
(2)通过向网站发起请求获取资源,提取其中有用的信息
3. requests库
(1)python实现的一个简单易用的HTTP库
支持HTTP持久连接和连接池、SSL证书验证、cookies处理、流式上传等
(2)向服务器发起请求并获取响应,完成访问网页的步骤
(3)简洁、容易理解,是最友好的网络爬虫库
(4)http请求类型
requests.request() :构造一个请求
requests.get() :获取HTML网页
requests.head() : 获取HTML网页头信息
requests.post() : 提交POST请求
requests.put() : 提交PUT请求
requests.patch() :提交局部修改请求
requests.delete() : 提交删除请求
requests.options() : 获取http请求
(5)返回的是一个response对象
(6)response对象
包含服务器返回的所有信息,例如状态码、编码形式、文本内容等;也包含请求的request信息
.status_code: HTTP请求的返回状态
.text: HTTP响应内容的字符串形式
.content: HTTP响应内容的二进制形式
.encoding: (从HTTP header中)分析响应内容的编码方式
.apparent_encoding: (从内容中)分析响应内容的编码方式
(7)定制请求头
requests的请求接口有一个名为headers的参数,向它传递一个字典来完成请求头定制
(8)设置代理
一些网站设置了同一IP访问次数的限制,可以在发送请求时指定proxies参数来替换代理,解决这一问题
4. Beautiful Soup
(1)页面解析器
使用requests库下载了网页并转换成字符串后,需要一个解析器来处理HTML和XML,解析页面格式,提取有用信息。
(2)解析器类型
Beautiful Soup它本身是可以调用若干的其他的程式化的标记语言的解析器来建立文档的层次的。
把获取到的文本通过各种解析器解析完了以后,可以在自己的内部建立一个文本的结构出来
解析器 | 使用方法 | 优势 |
python标准库 | BeautifulSoup(markup, "html.parser") | python的内置标准库 文档容错能力强 |
lxml HTML解析器 | BeautifulSoup(markup,”lxml") | 速度快 文档容错能力强 |
lxml XML解析器 | BeautifulSoup(markup, ["lxml-xml" ]) BeautifulSoup(markup, "xml") | 速度快 唯一支持XML的解析器 |
Html5lib | BeautifulSoup(markup, "html5lib") | 最好的容错性 以浏览器的方式解析文档 生成HTML5格式的文档 |
(3)搜索方法
find_all(name, attrs, recursive, string, **kwargs) #返回文档中符合条件的所有tag, 是一个列表
find(name, attrs, recursive, string, **kwargs) #find包括标记的名称(name),标记的属性(attrs), 是否可以递归的深入去查找(recursive),标记的字符串(string),其他的一些key value的形式的内容
find相当于fina_all()中limit = 1,返回一个结果
name: 对标签名称的检索字符串
attrs: 对标签属性值的检索字符串
recursive: 是否对子节点全部检索,默认为true
string: <>...</> 中检索字符串
**kwargs: 关键词参数列表
5. 爬虫的基本流程
(1)爬取网页
通过requests库向目标站点发送请求,若对方服务器正常响应,能够收到一个response对象,它包含了服务器返回的所有信息
import requests
url = "https://www.icourse163.org/home.htm?userId=1035115158#/home/course?userId=1035115158&p=1"
r = requests.get((url))
print(r.text)
'''
<!DOCTYPE html>
<html xmlns="//www.w3.org/1999/xhtml" xml:lang="zh" lang="zh">
<head>
<title>
中国大学MOOC(慕课)_优质在线课程学习平台
</title>
<script>
Object.defineProperty(window, 'handledomoocRPC', {
enumerable: false,
configurable: false,
writable: false,
value: null
});
</script>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
.....
'''
(2)解析页面
HTML代码-网页解析器
Json数据-json模块,转换成Json对象
二进制数据-以wb形式写入文件,再做进一步处理
举例:
import requests
from bs4 import BeautifulSoup
url = "https://www.icourse163.org/home.htm?userId=1035115158#/home/course?userId=1035115158&p=1"
r = requests.get((url))
#print(r.text)
soup = BeautifulSoup(r.text, 'lxml')
for news in soup.find_all('div', class_ = 'u-navLogin-cloud'):
info = news.find('a')
if len(info) > 0:
title = info.get_text()
link = str(info.get('href'))
print("标题:" + title)
print("链接:" + link)
'''
标题:
学校云
链接://www.icourse163.org/spoc/schoolcloud/index.htm
标题:
慕课堂
链接://www.icourse163.org/mooc/main/classroom
'''