Python爬虫基础1-获取网页
什么是爬虫
爬虫:获取网络数据、资源的程序。不仅可以使用python,也可以使用java,c++等语言编写,但是python编写爬虫简单省力,因此收到青睐。
合法爬取:
- 爬取人工能通过正常途径获取的内容
- 不要影响网站的正常运行
rebots.txt协议:君子协议,说明了网站希望爬虫爬取的内容以及不希望网站爬取的内容,比较大型的网站可以在域名后面加上/robots.txt访问,大多可以看到这个文件。
一般流程:
- 请求所需要的网络资源
- 过滤所需要的数据
- 保存数据或者处理结果
HTTP响应
HTTP响应的结构:
<HTTP version number> <status code> <reason phrase>
Response Headers
Response Body
例如:
HTTP/1.1 200 OK
Bdpagetype: 2
Bdqid: 0xd6b1f91b001a7eea
Cache-Control: private
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
<!DOCTYPE html><!--STATUS OK-->
<html><head><meta http-equiv="Content-Type"
…………
状态码:
- 200 成功
- 404 not found 资源找不到
- 403 没有权限
- 505 服务器内部错误
- 301 302 重定向
Headers:
关注 content-type,表示了访问资源的格式。常见的有text/html,image/jpeg,application/javascript等。有时候会在这里直接说明使用的字符集(编码格式)
响应体:
根据相应内容的格式,可以承载不同的信息,图片、文档、视频等,使用字节流的方式传输。
编码
字节流:是计算机传输、存储数据的形式。信息翻译为字节流的过程成为编码,字节流翻译为信息的过程称为解码。
在网络上传输的文档内容也是字节流的形式,如果要被人类阅读,必须使用和编码时相同的字符集进行解码。不解码有时候就无法看到中文等复杂的字符,而使用了错误的字符集解码就会产生乱码。
第一个爬虫
爬取百度页面,可以使用python中自带的urllib库,也可以安装更常用的requests库。
使用urllib库
示例代码:
# 引入
from urllib.request import urlopen
# 请求,得到响应对象
response = urlopen("http://www.baidu.com")
# 读取回应内容
content = response.read()
# 解码
content = content.decode("utf-8")
print(content)
# 存储到文件中
# 这里采用的utf-8指的是编码时使用的字符集,程序会按照utf-8格式将字符翻译为字节流存储
with open("baidu.html", mode="w", encoding="utf-8") as file:
file.write(content)
使用requests库
第一次使用的时候要先安装:
pip install requests
如果下载速度较慢,可以使用下面的方式,借助国内的镜像源下载:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
然后就可以使用requests库进行网页请求:
# 引入
import requests
# get方法请求
response = requests.get("http://www.baidu.com")
print(response)
# 获取响应头
print(response.headers)
# 获取请求体,并解码
print(response.content.decode("utf-8"))