持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情
Python专题的文章收录于专栏:Python专栏
1. 步骤
获取数据:爬虫会根据我们提供的网址(URL),向服务器发起请求,然后返回数据
解析数据:爬虫程序会把服务器返回的数据解析或我们能读懂的格式
提取数据:爬虫程序再从中提取我们需要的数据
储存数据:爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析
2. 基本语法
1. requests库
import requests
res = requests.get('URL') #返回一个Response对象
向服务器发送一个请求,参数是所需数据所在的网址,然后服务器作出响应,这里将响应的结果赋值给res
2. Response对象
#四个属性
response.status_code #检查请求是否成功
response.content #把response对象转换为二进制数据
response.text #把response对象转换为字符串数据
response.encoding #定义response对象的编码
1. response.status_code
常见解释
| 响应状态码 | 说明 | 举例 | 说明 |
|---|---|---|---|
| 1xx | 请求收到 | 100 | 继续提出请求 |
| 2xx | 请求成功 | 200 | 成功 |
| 3xx | 重定向 | 305 | 应使用代理访问 |
| 4xx | 客户端错误 | 403 | 禁止访问 |
| 5xx | 服务器端错误 | 503 | 服务不可用 |
2. response.content
适用于图片、音频、视频的下载
#下载一张图片
import requests
res = requests.get('URL')
pic = res.content
photo = open('ppt.jpg','wb')
photo.write(pic)
photo.close()
3. response.text
适用于文字、网页源代码的下载
#下载小说
import requests
res = requests.get('URL')
novel = res.text
print(novel)
4. response.encoding
一般出现乱码时再重新定义
3. BeautifulSoup库
- 解析
语法:bs对象=BeautifulSoup(要解析的文本,'解析器')
from bs4 import BeautifulSoup
soup = BeautifulSoup(res.text,'html.parser')
#第一个参数必须是字符串,第二个参数用html/parser
#html.parser是一个Python内置库,不是唯一的解析器,却是最简单的
- 提取
- find()和find_all()
可以匹配html的标签和属性,将BeautifulSoup对象中符合要求数据提取出来 其中find()只提取首个满足要求的数据,find_all()则是提取出所有满足要求的数据
find()
用法:BeautifulSoup对象.find(标签,属性)
返回值:返回Tag类对象
示例:
soup.find('div',class_="books")
find_all()
用法:同find()
返回值:返回ResultSet类对象(Tag对象以列表形式储存,可当做list来处理)
-
Tag对象
-
Tag.find()和Tag.find_all() 提取Tag中的Tag
-
Tag.text 提取Tag中的文字
-
Tag['属性名'] 数入参数:属性名,可提取该属性的值
-
4. Network面板(XHR)
记录浏览器的所有请求
Fetch出现得比XHR晚些,两者无本质区别,作用一样(Ajax技术)
- json(一种数据交换的语法)
#定义一个json
c = {
"forchange":
[
{"name":"吴","gender":"male"},
{"name":"陈","gender":"female"},
]
}
-
XHR用于传输数据,它能传输很多种数据,json是被传输的一种数据格式。
-
json与列表/字典可互相转换
import requests
r = requests.get('http://......')
print(r.json) #利用requests库内置的JSON解码器处理,将json转换为dict/list