- VSCODE 开发工具
- 引入requests 库
- 用r.status_code 来分析响应状态码是否为200
- 用r.text 来分析响应内容
- 用r.encoding 来分析响应编码方式
- 用r.apparen_encoding 对响应内容编码方式分析
- 用r.content 响应内容的二进制形式
- 注意: 一般是使用r.encoding=r.apparen_encoding来解决爬取网页乱码的问题
下面展示一些 python
import requests def getHtml(url): try: r=requests.get(url) r.raise_for_status()#用来测试响应返回状态码是否为200 r.encoding=r.apparent_encoding #用来解决页面乱码 return r.text except: return '发生异常' if __name__=='__main__' u="http://www.baidu.com" print(getHtml(u))
###HTTP协议对资源的操作方法(请求方式)
- get查: 请求URL位置资源
- head查: 请求获取URL位置资源响应消息报告
- post增: 请求URL位置的资源后附加新的数据(一般用于提交表单)
- put增: 请求URL位置存储一个资源,覆盖URL位置资源
- patch改: 请求局部更新URL位置的资源,即改变该处资源的部分内容
- delete删: 请求删除URL 位置存储的资源
####patch和put 的区别 - put是全部重新定向(具有覆盖性)
- patch 则是将单一数据修改
###requests库13个控制访问参数(**kwargs)-
params:字典或者字节序列,增加到URL中
import requests d={'key1':'value1','key2':'value2'} r=requests.get('http://python123.io/ws',params=d) print(r.url) https://python123.io/ws?key1=value1&key2=value2 -
data: 字典或者字节序列,增加的请求体中
import requests d={'key1':'value1','key2':'value2'} r=requests.request('POST','http://python123.io.ws',data=d)#方法一 r=requests.post('http://python123.io/ws',data=d)#方法二 print(r.url) -
json: json格式的数据
import requests d={'key1':'value1','key2':'value2'} r=requests.post('http://python123.io/ws',json=d) r=requests.request('POST','http://python123.io/ws',json=d) print(r.url) -
headers:字典,HTTP协议头
import requests head={'user-agent':'Chrome/10'} r=requests.post('http://python123.io/ws',headers=head) print(r.url) -
cookies:字典或者CookieJar,Request中的cookie
1. 查看cookie
2. requests 库的cookie是用字典的形式展示的,而网页中的cookie是用;进行分割的
3. -
auth:元组,支持HTTP认证功能
-
files:字典类型,传输文件(可以向某一个链接提交某一个文件)
import requests fs={'file':open('path','rb')} r=requests.post('http://python123.io/ws',file=fs) -
timeout:设定超时时间
-
proxies:字典类型,设定访问代理服务器,可以增加登陆认证
-
allow_redirects:重定向开关 (boolean)
-
stream:获取内容立即下载开关(boolean)
-
verify:认证SSL证书开关(boolean)
-
cert:本地SSL证书路径
-
pip install beautifulsoup4查看库安装情况
pip list简单实例
import requests #导入Requests 库 from bs4 import BeautifulSoup #导入beautiful soup 库 url='http://python123.io/ws/demo.html' r=requests.get(url) r.encoding=r.apparent_encoding #获取的网页内容 page=r.text #解析页面内容 soup=BeautifulSoup(page,'html.parser') #美化页面 print(soup.prettify())
| 属性 | 说明 |
|---|---|
| .contents | 子节点列表 |
| .children | 子节点的迭代类型 |
| .descendants | 子孙节点的迭代 |
| – | – |
| .parent | 节点的父标签 |
| .parents | 节点的祖先标签 |
| – | – |
| .name | 遍历标签下有哪些标签 |
用来简洁表达一组字符串的方式
| 操作符 | 说明 | 实例 |
|---|---|---|
| . | 表示任何单个字符 | |
| [] | 字符集,对单个字符给出取值范围 | [abc]表示a,b,c`[a-z]表示a到z单个字符 |
| [^] | 非字符集,排除单个字符 | [^abc]表示非a,b,c的单个字符 |
| * | 前一个字符0次或无限次扩展 | abc*表示ab,abc,abcc,abccc, |
| + | 前一个字符1次或无限次扩展 | abc+表示abc,abcc,abccc |
| | | 表示左右任意一个 | abc|def表示abc、def |
| ? | 前一个字符出现0次或1次扩展 | abc?表示ab,abc |
| {m} | 前一个字符出现的次数 | ab{2}c表示abbc |
| {m,n} | 前一个字符出现m到n次 | ab{2,3}c表示abbc或abbbc |
| ^ | 匹配字符串开头 | ^abc表示abc在一个字符串的开头 |
| $ | 匹配字符串结尾 | abc$表示abc 结尾的字符串 |
| () | 分组标记,内部只能使用“|”操作符号 | (abc)表示abc,(abc|def)表示abc、def |
| d | 数字,等价于[0-9] | |
| D | 匹配除数字以外字符 | |
| w | 除标点符号以外字符,等价于[A-Za-z0-9] |
- 第一重(固定字符串查找)
import re text='升高:188,体重:167,年龄29,学号:0927,电话:110' # 假设查找一个固定字符串188 #text表示要查找的字符串 a=re.findall(r'188',text) print(a)
- 第二重(找到数字类型字符)
import re text='升高:188,体重:167,年龄29,学号:0927,电话:110' # 假设查找所有单个数字字符 使用d a=re.findall(r'd',text) print(a)
- 第三重(查找多个数字类型或者出标点符号类字符)
import re
text='升高:188,体重:167,年龄29,学号:0927,电话:110'
# 假设查找所有单个数字字符 使用d
# {3.5}代表查找该类型字符串的长度区间为3-5
a=re.findall(r'd{3,5}',text)
#代表查找文本内连贯的字符串
b=re.findall(r'd+',text)
print(a)
4.第四重(查找连贯字符串)
import re text='升高:188,体重:167,年龄29,学号:0927,电话号码:110' a=re.findall(r'D+',text) #表示除了数字以外连贯字符串 b=re.findall(r'd+',text) #表示查找连贯数字字符串 c=re.findall(r'w+',text)#表示查找标点符号意外的连贯字符串 print(a) print(b) print(c)
- 第五重( 查找两种不同排列结构的连贯字符串)
from cgi import print_arguments
import re
text='手机号:18500009999,邮箱:1498999631@qq.com'
#"|"表示两种不同排列结构的连贯字符串
# - 1d{10}表示手机号
# - w+@qq.com表示qq邮箱
a=re.findall(r'1d{10}|w+@qq.com',text)
print(a)
- 第六重(限定位置, 如:文章开头或者结尾)
import re
text='手机号:18500009999,邮箱:1498999631@qq.com'
# "^"表示文章开头开始匹配正则表达式
# "$"表示文章末尾开始匹配正则表达式
a=re.findall(r'^1d{10}|w+@qq.com$',text)
print(a)
- 第七重(内部约束)
import re text='手机号:18500009999,邮箱:1498999631@qq.com' #匹配邮箱后字符 a=re.findall(r'(?<=邮箱.)w+@qq.com',text) print(a)



