Python---Requests、BeautifulSoup

一、requests库的详解:

request参数:

requests.request(
    method,   # 请求方式 get post put等
    url,      # 访问地址
    params,   # 在url上传递的参数,以字典的形式{"date":"today"}传参,get方式会用到(xxx.com/news?date=today)
    data,     # 在请求体里传递的数据,post方式会用到,以字典的方式传参,还可以以字符串的形式穿递
              # 类似"user=alex&pwd=2333", 传字典最后也会转换为字符串;也可以上传文件。
    json,     # 在请求体里面传递数据,会自动执行json.dumps方法,会变成字符串"{'name':'alex'}"。
    headers,  # 请求头,以字典的形式传参
    cookies,  # 就是cookie, cookie在请求头中
    files,    # 进行上传文件, {"f1": open("s1.py" ,"rb")},value既可以是文件对象也可以是文件内容
              # 还可以以元组的形式指定上传到服务器的文件名{"f1": ("文件名", open("s1.py" ,"rb" ,'application/vnd.ms-excel'))}    
              # 如果是一个文件对象会在内部调用read方法。
    auth,     # 认证,适用于有弹窗要求输入用户名和密码,实际上是在请求头加了一条数据(用户名和密码)
              # auth = HTTPBasicAuth("用户名","密码")  
    timeout,  # 超时时间, 也可以是元组的形式(发送时间,读的时间)
    allow _redirects,  #  是否进行重定向跳转
    proxies,  # 代理,字典的形式 {"http" : "127.01.1.0"}
    stream,   # stream=True  代表是流的处理  当下载文件过大的时候用
    verify,   # 是否使用证书
    cert      # 证书文件, cert ="证书文件路径" 元组形式传参(***.cert,***.key)
)

※:request.get()和request.post()在底层调用的都是requests.requests()。

※:当传参数时出现字典里套字典的情况时用json,其他时候二者都可。

流式下载:

from contextlib import closing
    with closing(requests.get('http://httpbin.org/get', stream=True)) as r:
    # 在此处理响应。
        for i in r.iter_content():
            print(i)

基于session的请求

import requests

session = requests.Session()
#  用法和requests一样
response = session.get(url="http://dig.chouti.com/help/service")  

Response响应的参数:

response.status_code   # 状态码
        .headers       # 响应头
        .encoding      # 编码
        .apparent_encoding   # 可接受的编码
        .text          # 以文本形式返回响应内容。
        .content       # 以字节的形式返回响应内容。以字节的形式返回响应内容。
        .cookies.get_dict()       # cookies属性
        .url           # 用于返回响应的url.由于重定向的存在,可能会出现我们请求的地址和响应的地址并不 一样的情况.
        .json          # 处理 JSON 数据

二、BeautifulSoup库的详解

该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查找指定元素,从而使得在HTML或XML中查找指定元素变得简单。

1. name,标签名称

tag = soup.find('a')
name = tag.name # 获取

tag.name = 'span' # 设置

2. attr,标签属性

tag = soup.find('a')
tag.attrs.get("href")    # 获取href

tag.attrs = {'ik':123} # 设置
tag.attrs['id'] = 'iiiii' # 设置

3. children,所有子标签(换行也会拿到),返回的是一个迭代器。

body = soup.find('body')
body.children      #  所有子标签
body.descendants   #  所有子子孙孙标签

4. decode,转换为字符串(含当前标签);decode_contents(不含当前标签)

body = soup.find('body')
body.decode()
body.decode_contents()

5. encode,转换为字节(含当前标签);encode_contents(不含当前标签)

body = soup.find('body')
body.encode()
body.encode_contents()

6. find,获取匹配的第一个标签

#  找到第一个符合条件的对象,返回的是一个soup对象
soup.find('a')

# 找到一个a标签,class=sisiter,text=Lacie,递归的去寻找
soup.find(name='a', attrs={'class': 'sister'}, recursive=True, text='Lacie')

7. find_all,获取匹配的所有标签

# find_all的用法和find一样,但是有拓展,返回的是一个列表对象
soup.find_all(name='a', attrs={'class': 'sister'}, recursive=True, text='Lacie')
 
# ####### 列表 #######
soup.find_all(name=['a','div'])   # 找到name为"a"或者为"div"

# ####### 正则 #######
import re

rep = re.compile('^p')
soup.find_all(name=rep)     #  找到所有name符合正则表达式的

# ####### 方法筛选 #######
def func(tag):  #  tag是当前处理的标签
  return tag.has_attr('class') and tag.has_attr('id')

soup.find_all(name=func)

8. has_attr,检查标签是否具有该属性

tag = soup.find('a')
tag.has_attr('id')

9. get_text,获取标签内部文本内容

tag = soup.find('a')
tag.get_text('id')

10. select,select_one, CSS选择器

soup.select("title")   # 找到title标签
 
soup.select("#link")   # 找到id为link的元素
 
soup.select("body a")  # 找到body标签下所有的a标签

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值