python :requests,beautfulsoup,re

request库的应用

在这里插入图片描述

  • requests.get(url,params=None,**kwargs)
  • url :获取url链接
  • params :url中的额外参数,字典或字节流格式,可选
  • **kwargs:12个控制访问的参数
    首先建立一个对象r:
    r=requests.get(“这里面写的是网址!”)

requests 对象的属性有:

在这里插入图片描述
在这里插入图片描述

  • r.status_code 如果出现200就是成功 出现其他的就是失败!
  • r.encoding :如果header 中不存在charset ,则认为编码为ISO-8859-1
  • r.apparent_encoding:根据网页内容分析出编码的方式 ,可以看做是r.encoding的备选
  • r=requests.get(url) 连接他又风险 异常处理很重要!
    在这里插入图片描述

requests.request(method,url,**kwargs)(不常用了,一般直接用函数)

在这里插入图片描述

  • method : 请求方法
    在这里插入图片描述

**kwargs :控制访问的参数 :

  1. params : 字典或者字节序列,作为参数加到url 中
    例如:
    在这里插入图片描述
    2.data :字典,字节序列或文件对象,作为Request的内容
    data 的用法有:在用post的方法时,在网页F12获取network,head 里的from data 这个就是相关的请求,吧form data 赋值在里面就会获取相关的请求,
    但是记得也要改一下url 的链接,是哪一个url 链接的请求
    在这里插入图片描述
    3.json :JOSN的格式的数据,作为Request的内容

在这里插入图片描述
4.headers:字典,HTTP定制头
在这里插入图片描述
5.files:字典类型,传输文件
在这里插入图片描述
6.timeout :设定超时时间,秒为单位
在这里插入图片描述
7.proxies:字典类型,设定访问代理服务器,不让别人知道我们的地址,防止自己的地址被封!
在这里插入图片描述

**kwargs其他的参数:
在这里插入图片描述
在这里插入图片描述

request的函数

  • requests.get(url,params=None,**kwargs) 可以用的参数:(都可用!)
    在这里插入图片描述
  • request.head(url,**kwargs)
    在这里插入图片描述
    *request.post(url,data=None,json=None,**kwargs)
    data 的用法有:在用post的方法时,在网页F12获取network,head 里的from data 这个就是相关的请求,吧form data 赋值在里面就会获取相关的请求,
    但是记得也要改一下url 的链接,是哪一个url 链接的请求
    在这里插入图片描述
  • request.put(url,data=None,**kwargs)
    在这里插入图片描述
  • requests.patch(url,data=None,**kwargs)
    在这里插入图片描述
    requests.delete(url,**kwargs)
    在这里插入图片描述

需要登录页面的请求(cookie )(session)

在这里插入图片描述

当需要输入账号的时候可以用session发送post请求------>但是他就是保存了cookie ,用headers 里面加上 cookies 更加方便! 也可以直接在requests的参数中增加cookies 参数 但是要把cookie转化字典.

在这里插入图片描述
session一般步骤

import requests
#实例化一个session
session=requests.session()

# 2.用post请求 在登录网页请求 
response=session.post(url="url 地址",headers="请求头 ,cookie ,之前的网页",data="表单信息 密码什么的")

# 3. 现在就可以用get 请求获取登录后的网页
r=session.get("....")

处理不信任的SSL 证书:

加一个参数 verify

import requests
r=requests.get("网站",verify=False)

在这里插入图片描述
不使用session 直接在headers加cookies或者直接增加参数 cookies
在这里插入图片描述
也可以直接在requests的参数中增加cookie 参数 但是要把cookie转化字典.(麻烦了 直接把cookies 放在 headers方便多了)
在这里插入图片描述

post请求的查询:

1.找到需要post请求的url,
2.找到需要post 请求的data 里面的数据
在这里插入图片描述
按照 from data 里面的数据格式 获取 数据在提交到post请求的data里面去
3.r=requests.post(url="",data="") ==>url 是要请求的地址,data 是 从 form data 获取的相关数据
在这里插入图片描述

url解码的方法

解码 requests.utils.unquote()
设置码:requests.utils.quote()
在这里插入图片描述

requests 小技巧;

在这里插入图片描述

代理 (防止被封)

proxy={
    "http":'58.249.55.222.9797'
}
r=requests.get(url="你要爬的网页",proxies=proxy)# 这里的proxy 就是代理网站

requests 经常用的 东西:

r=requests.get()
r.text #获得文本
r.content.decode("utf-8") # 用二进制解码到 utf-8
r.content # 这个是用来存照片或者存视频时候用的东西
r.url # 看响应头
r.encoding # 看字符编码
r.status_code # 看响应码 

用params 在url 上面添加相应的参数:


params={
wd:"中国"
}
r=request.get(url="https://www.baidu.com/",params=params)

Beautiful Soup

  • 基础:
  • 在这里插入图片描述

在这里插入图片描述

  • 先使用 requests 库 建立一个demo 之后都会用到.
    在这里插入图片描述
  • 美化提取的HTML
    *使用 prettify
    在这里插入图片描述
from bs4 import BeautifulSoup
soup=BeautifulSoup(demo,"html.parser")  # 这个 demo 是之前建立的
print(soup.a) # 获取 a标签和a标签里面的内容 <a>内容</a>
print(soup.a.name) # 获取标签的名字 我自己觉得没什么用
print(soup.a.attrs) # 获取 一个字典类型,内容a里面是标签的属性,
print(soup.a.attrs["class"]) # 只获取a里面class的属性
print(soup.a.string) # 获取a里面的字符

接下来是例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结:
在这里插入图片描述
基于bs4库的html内容遍历的方法:
一共有三种遍历:下行遍历,上行遍历,平行遍历
在这里插入图片描述

  • 下行遍历
    在这里插入图片描述
    下行遍历的例子:
    在这里插入图片描述
for child in soup.body.children:
	print(child)  # 遍历儿子节点

for child in soup.boy.descendants:
	print(child) # 遍历子孙节点

上行遍历:
在这里插入图片描述

例子:

在这里插入图片描述

soup =BeautifulSoup(demo,"html.parser")
for parent in soup.a.parents:
	if parent is None:
		print(parent)
	else:
		print(parent.name)

输出:

p
body
html
[docment]

平行遍历:
在这里插入图片描述
什么是平行遍历,需要注意的是:在这里插入图片描述
例子:
在这里插入图片描述
标签树的平行遍历:

for sibling in soup.a.next_sibling:
	print(sibling)  # 遍历后续节点


for sibling in soup.a.previous_sibling:
	print(sibling)   #遍历前续节点
	

遍历总结:
在这里插入图片描述
BeautfulSoup 的find_all() 方法
<>.find_all(name,attrs,recursive,string,**kwargs)
<>这个是指BeautfluSoup 煮的一碗汤
他返回的是一个列表类型,存储查找的结果
.name :对标签名称的检索字符串(标签名)
.attrs: 对标签属性值的检索字符串们可以标志属性检索
.recursive:是对子孙全部索引,默认是True,(意思就是默认查询他的所有子孙)
.string: 把<>…</>中的字符串区域的检索字符串
注意: 因为find_all经常用所有可以简写 不用写find_all
例如:

 <tag>(...) 等价于 <tag>.find_all(..)
 soup(..) 等价于 <soup.find_all>

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

方法说明
<>.find()搜索且返回一个结果,同.find_all()参数
<>find_parents()在先辈节点中搜索,返回列表类型,同.find_all
<>.find_parent()在先辈节点中返回一个结果,同.find()参数
<>.find_next_siblings()在后续平行节点中搜索返回列表类型,同.find_all参数
<>.find_next_sibling()在后续平行节点中返回一个结果,同.find() 参数
<>.find_previous_siblings()在前序平行节点中搜索,返回列表类型,同find_all()参数
<>.find_previous_sibling()在前序平行节点中返回一个结果,同find() 参数

find_all 的关键用法:

1.查找符合要求的a标签

alist=soup.find_all("a",id="test",class="text")  # 这个就是找打a标签 然后 id 等于 "test" class等于 "text"

2.获取a标签的href属性
alist=soup.find_all('a')
for a in alist:
	(1) 通过下表操作
	href=a['href']
	(2)通过attrs['href']获得
	href=a.attrs['href']
3.获取文本
(1) 获取title 标签的文本
title.string 
(2)title.strings 这个也可以获取文本,获取所有非标签的字符串
(3)title.stripped_strings 获取不是换行的标签
(4) title.text 也可以获取文本
(5)title.contents 有多行也可以去取到


css 选择器

在beautifulsoup中使用css选择器,那么应该使用soup.select() 方法,应该传递一个css 选择器的字符串给select方法

soup=BeautifulSoup(html,'lxml')
1.获取所有的tr 标签
trs=soup.select('tr')
2.获取第二个tr标签
trs=soup.select('tr')[1]
3.获取所有class 等于evevn 的tr 标签
trs=soup.select('tr[class="even"]')
for tr in strs:
	print(tr)
4.找到class 为panel 属性的标签 下面的 class 属性为panel-heading 
print(soup.select('.panel .panel-heading'))
5.找到 ul 下面的 所有li(子孙标签都找到) 
print(soup.select('ul li'))
6.找到 idlist-2  下面的 class 为 element  的标签
print(soup.select('#list-2 .element'))
7.找到 ul 下面的li的儿子标签 不包含 孙子标签
print(soup.select('ul>li'))
8.找到 div class 等于panel-body 下面的 ul 下面的 li 
print(soup.select('div[class="panel-body"] ul li'))

使用BeautifulSoup的一些注意点:

存在bs4.element.NavigableString和bs4.element.Comment导致使用.string时出现None.(有注释和内容的时候:使用string 会出现None)
因为string识别不出是注释和文字内容 所以要用:.comments[0],comments[1]…等等去取到相关数据
在html 页面中存在br 标签使用 .string 导致出现None 的时候
现在可以用replace 的方法来除去标签中的
标签
或者直接用text

re 库的使用!

re库默认采用贪念模式,就是匹配到多个可用的字符,输出最长的字符。
想要最小的时候可以进行这项操作 加问号(?):
re 的. (点) 不能匹配到换行如要 让他取到换行符需要加 re.DOTALL

 t=re.findall(r'正则表达式','字符串',re.DOTALL) # 这样 .  就可以匹配到换行了

在这里插入图片描述
基本用法:
在这里插入图片描述
在这里插入图片描述
一些常用的例子:在这里插入图片描述
在这里插入图片描述
string 来表示
在这里插入图片描述
在这里插入图片描述
search:
在这里插入图片描述
要用.group(0),.group(1)…来获取对象

match:
在这里插入图片描述
findall:
在这里插入图片描述split:
在这里插入图片描述
finditer:
在这里插入图片描述

它的迭代类型可以用for循环出来!

re.sub:
在这里插入图片描述
re库的另一种写法:
在这里插入图片描述
compile:
在这里插入图片描述
之前的 match 对象的属性:
match对象是一次匹配的结果,包含匹配的很多信息

在这里插入图片描述在这里插入图片描述
实例:
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python中的requests库返回的是JSON格式的数据。JSON是一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和生成。在Python中,可以使用requests库发送HTTP请求,并将响应的数据解析为JSON格式。使用requests库发送HTTP请求时,可以指定请求的方法、URL、请求头、请求体等信息,然后获取响应的数据。响应的数据可以是JSON格式的字符串,也可以是Python中的字典或列表对象。要将JSON格式的字符串解析为Python中的对象,可以使用json模块中的loads()函数。例如,可以使用以下代码将JSON格式的字符串解析为Python中的字典对象: import requests import json response = requests.get('https://api.github.com/users/octocat') data = json.loads(response.text) print(data['login']) # 输出octocat ### 回答2: Python中的requests库是一个常用的HTTP客户端库,用于向web服务器发送请求并获取响应。requests库返回的响应可以是各种格式的数据,如HTML、JSON、XML等。在本文中,我们将主要关注requests返回的JSON数据。 JSON(JavaScript Object Notation)是一种轻量级数据交换格式,广泛用于web应用程序之间的数据交换。JSON数据使用键值对(key-value pairs)表示,其中的值可以是数字、字符串、数组、对象或null。与其他数据格式相比,JSON数据具有易读、易于解析、易于生成和易于编写的特点。 requests库返回的JSON数据可以通过response对象的json()方法获取。json()方法将JSON数据转换为Python字典(dict)对象,以方便我们通过键值对来访问数据。例如,在以下示例中,我们使用requests库向GitHub API发送请求并获取响应。然后,我们通过json()方法将响应的JSON数据解析为Python字典,以方便我们访问其中的数据: ``` import requests # 向GitHub API发送请求,获取最受欢迎的Python项目 response = requests.get('https://api.github.com/search/repositories', params={'q': 'language:python', 'sort': 'stars', 'order': 'desc'}) # 将响应的JSON数据解析为Python字典 data = response.json() # 访问字典中的数据 print('最受欢迎的Python项目是:', data['items'][0]['name']) print('它的描述是:', data['items'][0]['description']) ``` 通过上述代码,我们可以发现,requests返回的JSON数据与Python字典非常相似,因为我们可以像访问字典一样访问JSON数据中的键和值。但需要注意的是,如果数据格式错误或不是有效的JSON数据,调用json方法将会导致代码抛出异常。因此,在处理JSON数据之前,请确保数据是有效和可靠的。 总之,requests库返回的JSON数据是常见的数据格式之一,而Python的字典对象提供了灵活和方便的访问方式,可以使我们更容易理解和管理从网络获得的数据。在实际开发中,请求数据并解析JSON可以大大提高效率,并使我们在构建web应用程序时更加灵活和易于维护。 ### 回答3: Pythonrequests是一个非常流行的HTTP库,可以方便地发送HTTP请求和获取响应。其中返回的数据类型有多种,包括字符串、字节流、JSON等等。而本文主要讨论requests返回的JSON数据。 JSON是JavaScript对象表示法的缩写,它是一种轻量级的数据交换格式,易于阅读和编写,并且可以被各种语言支持。JSON格式看起来类似于字典,由键值对组成。在Python中,可以使用json模块将JSON数据转化为Python对象。 当我们使用requests发送请求并获得响应之后,可以通过response对象的json()方法将返回的JSON数据转换为Python对象。因此在处理API请求时,使用requests库发送请求并解析JSON数据,是非常常见的操作。 例如,一般API请求的返回数据格式类似于以下格式: ```json { "status_code": 200, "message": "success", "data": { "name": "John", "age": 28, "hobby": ["reading", "swimming"] } } ``` 使用Python中的requests库发送请求: ```python import requests response = requests.get('https://example.com/api/v1/user/1') json_data = response.json() print(json_data) ``` 转换后的Python对象: ```python { "status_code": 200, "message": "success", "data": { "name": "John", "age": 28, "hobby": ["reading", "swimming"] } } ``` 我们可以通过Python对象的方式来处理API请求的返回数据。 需要注意的是,当requests访问的API返回的不是JSON数据时,调用json()方法会抛出 ValueError 异常,因此在进行json格式转换时需要进行处理。 总而言之,requests库提供了非常方便的接口,可以轻松地发送请求并获得响应,转换为JSON格式的数据,进而得到Python对象,使数据的处理和操作变得非常简单。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值