小小前端浅学一下Python-5(爬虫基础)

217 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情

Python专题的文章收录于专栏:Python专栏

1. 步骤

  1. 获取数据:爬虫会根据我们提供的网址(URL),向服务器发起请求,然后返回数据

  2. 解析数据:爬虫程序会把服务器返回的数据解析或我们能读懂的格式

  3. 提取数据:爬虫程序再从中提取我们需要的数据

  4. 储存数据:爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析

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库

  1. 解析

语法:bs对象=BeautifulSoup(要解析的文本,'解析器')

from bs4 import BeautifulSoup
soup = BeautifulSoup(res.text,'html.parser')
#第一个参数必须是字符串,第二个参数用html/parser
#html.parser是一个Python内置库,不是唯一的解析器,却是最简单的
  1. 提取
  • 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