备注:本学习笔记适合对python语法有一点基础,对网页有一些基础认识,同时刚刚接触爬虫的同学,不过如果什么都不懂也没关系,本文会在将代码标注得特别详细。本文所有代码环境:WIN10,python 3.7 ,Chrome 73.0,MySQL8.0
python库的安装:
直接shell中(win10用powershell,也可用cmd)输入命令(以requests库为例):
pip install requests
常用的python爬虫库:
requests
lxml
Beautiful Soup
pyquery
PyMySQL
Selenium
常用的数据存储:
txt文档,csv,Excel (简单粗暴,适合自己玩)
Json格式(进阶,与前后端交互多采用)
Mysql,MongoDB (项目多采用)
常用库的常用功能的使用汇总
requests
功能与作用:和想要爬取的网页建立联系,相当于爬虫的第一步,“打开”要爬取的网页。
首先,先介绍一下网页的基础知识:
(有H5,CSS, JS前端知识的直接跳过,没有的也不用去学习,我我们只是爬取,不是建立网页,一次解决一个问题,关注一个问题,学习忌讳一次就想解决所有的问题,)
- 网址:网页的“家”的地址,或者“坐标位置”,网页的归宿地,我们通过网站去打开网页,再专业一些,就是常说的URL
-
超文本:我们随便在Chrome中打开一个网站,比如百度首页,然后点击鼠标右键-检查,或者直接Ctrl+Shift+I,得到了一个相当于网页代码的东西,类似于“家里的具体布置图纸情况”,实际的情况就是根据这个图纸转换而来的,“图纸”是给设计人员使用的,真实情况是给使用者使用的。这个“图纸”实际就是一些列HTML代码,包含了一系列的标签。如下图的百度:
从中我们可以看出:
- HTML是以<html>标签开头,</html>标签结尾
- 中间嵌套了好多其他标签,例如<head>与<body>,相互之间构成层级结构
- 选中图中标红的按钮,在选中百度的搜索框,Chrome会自动定位这个搜索框所在的标签
- 网页交换的过程:其实就是你的电脑(或手机)给服务器发送一个请求,服务器获得这个请求后将响应传递到电脑的页面上,在这个过程,服务器可以会验证一些事情,例如你是不是电脑人(爬虫)呀,让你输入验证码(爬虫过于频发的访问服务器会造成服务器压力过大);又或者你是不是大赌场的会员呀,有没有满18岁呀,有没有登录账号,又不是会员,美女荷官就不给你在线发牌等等。
- 常见的请求:
- get:相当于在浏览器中输入网站并回车
- post:典型的情景是用户输入账号与密码后点击登录
有了这些基础,直接开始代码实战吧。
requests
直接给出一个实例的代码与解释标注:
import requests #导入requests库
url = 'www.baidu.com'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
# headers字典在这里是把爬虫伪装成浏览器,还有存在登录信息Cookies的作用,可以在字典了添加cookies的键-值
try:
response = requests.get(url,headers=headers)
response.raise_for_status()
#请求状态码不是200则会引发HTTPError异常
response.encoding = response.apparent_encoding
#r.encoding :从HTTP header 中c猜测的响应内容编码方式,如果不存在charset,则默认为ISO-8859-1
# r.apparent_encoding : 从内容中分析出的响应内容编码方式(备选编码方式)
#提前设置encoding,避免后续解析乱码问题
content = response.text
print(content)
# 获取网页的HTML代码给content
return content
except Exception as e:
print('Error',e.arg)
以上就是一个典型的requests库使用情况,这几行代码使用频率很高。
除此之外,requests还有一些其他的也经常用到:
- requests.post(url) post请求
- response.json() 直接返回json字典格式
- response.content 返回二进制格式的文件,通常用于图片MP3等
- response.status_code 返回响应的状态码(200是成功)
lxml
在requests得到网页代码后,还需要对代码进行解析,通常最原始的方法就是写正则表达式进行匹配,但是太麻烦,又容易出错(正则表达式大神无视),就可以采用解析库lxml,本质上就是XPath(XML路径语言)
Beautiful Soup
进一步强大的解析库
pyquery
解析库终极选择
Selenium
操作浏览器