Python爬虫基础1-获取网页

什么是爬虫

爬虫:获取网络数据、资源的程序。不仅可以使用python,也可以使用java,c++等语言编写,但是python编写爬虫简单省力,因此收到青睐。

合法爬取:

  • 爬取人工能通过正常途径获取的内容
  • 不要影响网站的正常运行

rebots.txt协议:君子协议,说明了网站希望爬虫爬取的内容以及不希望网站爬取的内容,比较大型的网站可以在域名后面加上/robots.txt访问,大多可以看到这个文件。

一般流程:

  1. 请求所需要的网络资源
  2. 过滤所需要的数据
  3. 保存数据或者处理结果

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"))