Claws Garden

Python爬虫基础1-获取网页

Python爬虫基础1-获取网页

什么是爬虫

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

合法爬取:

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

一般流程:

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

HTTP响应

HTTP响应的结构:

1<HTTP version number> <status code> <reason phrase>
2Response Headers
3
4Response Body

例如:

 1HTTP/1.1 200 OK
 2Bdpagetype: 2
 3Bdqid: 0xd6b1f91b001a7eea
 4Cache-Control: private
 5Connection: keep-alive
 6Content-Encoding: gzip
 7Content-Type: text/html;charset=utf-8
 8
 9<!DOCTYPE html><!--STATUS OK-->
10    <html><head><meta http-equiv="Content-Type" 
11    …………

状态码:

Headers:

关注 content-type,表示了访问资源的格式。常见的有text/html,image/jpeg,application/javascript等。有时候会在这里直接说明使用的字符集(编码格式)

响应体:

根据相应内容的格式,可以承载不同的信息,图片、文档、视频等,使用字节流的方式传输。

编码

字节流:是计算机传输、存储数据的形式。信息翻译为字节流的过程成为编码,字节流翻译为信息的过程称为解码。

在网络上传输的文档内容也是字节流的形式,如果要被人类阅读,必须使用和编码时相同的字符集进行解码。不解码有时候就无法看到中文等复杂的字符,而使用了错误的字符集解码就会产生乱码。

第一个爬虫

爬取百度页面,可以使用python中自带的urllib库,也可以安装更常用的requests库。

使用urllib库

示例代码:

 1# 引入
 2from urllib.request import urlopen
 3
 4# 请求,得到响应对象
 5response = urlopen("http://www.baidu.com")
 6# 读取回应内容
 7content = response.read()
 8# 解码
 9content = content.decode("utf-8")
10print(content)
11
12# 存储到文件中
13# 这里采用的utf-8指的是编码时使用的字符集,程序会按照utf-8格式将字符翻译为字节流存储
14with open("baidu.html", mode="w", encoding="utf-8") as file:
15    file.write(content)

使用requests库

第一次使用的时候要先安装:

1pip install requests

如果下载速度较慢,可以使用下面的方式,借助国内的镜像源下载:

1pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

然后就可以使用requests库进行网页请求:

 1# 引入
 2import requests
 3
 4# get方法请求
 5response = requests.get("http://www.baidu.com")
 6print(response)
 7# 获取响应头
 8print(response.headers)
 9# 获取请求体,并解码
10print(response.content.decode("utf-8"))

#Python爬虫教程