爬虫·崔庆才网课笔记第二章

2.2 requests的使用

2.实例引入

urllib.request 构造GET请求。如果传递了参数data,请求方式为POST。

3.GET请求

  • 基本实例
r = requests.get("https://httpbin.org/get", params=data)
print(type(r.json()))

将json格式的字符串转为字典。

  • 抓取网页
 r = requests.get('https://static1.scrape.center/')
pattern = re.compile('<h2.*?>(.*?)</h2>', re.S)
titles = re.findall(pattern, r.text)
print(titles)

re.S:使 . 匹配包括换行在内的所有字符
(.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串

r = requests.get('https://github.com/favicon.ico')
print(r.text)#图片数据为二进制,text打印为str类型乱码
print(r.content)
with open('favicon.ico','wb') as f:
	f.write(r.content)
  • 添加请求头,比如User-Agent

5.POST请求

headers属性为CaseInsensitiveDict。
cookies属性为RequestsCookieJar

request.codes状态码.
request.codes.ok得到成功的状态码200reque
以字符串ok来表示状态比200更直观。
404:request.codes.not_found

6.高级用法

  • Cookie设置
r = requests.get('https://www.baidu.com')
print(r.cookies)
for key, value in r.cookies.items():
    print(key + '=' + value)

Cookie屬於RequestCookieJar類型.

jar=requests.cookies.RequestsCookieJar()#新建RequestCookieJar對象
jar.set(key,value)#set方法設置每个Cookie条目的键名和键值。
r=requests.get('\url',cookies=jar,headers=headers)#cookies传参
  • Session
    直接用requests库的get或post方法可模拟网页请求,相当于不同的Session即用两个浏览器分别打开不同的网页。
    Session对象,相当于打开新的浏览器选项卡而非新的浏览器,模拟同一个会话。
s = requests.Session()
s.get('https://httpbin.org/cookies/set/number/123456789')
r = s.get('https://httpbin.org/cookies')
print(r.text)
  • SSL证书验证
    网站的HTTPS证书不被CA机构认可
response = requests.get('https://static2.scrape.center/', verify=False)
print(response.status_code)

verify参数验证证书是否有效,False则跳过验证。

urllib3.disable_warnings()

忽略警告

logging.captureWarnings(True)

将警告捕获到日志

response=requests.get('\url',cert=('\.crt','\.key'))

指定客户端密钥和证书

  • 超时设置
    默认为timeout=None
  • 身份认证
    基本身份认证Basic Authentication

OAuth认证

url='\url'
auth=OAuth1('YOUR_APP_KEY','YOUR_APP_SECRET','USER_OAUTH_TOKEN','USER_OAUTH_TOKEN_SECRET')
request.get(url,auth=auth)

auth参数可直接传元组,默认转为HTTPBasicAuth类

  • 代理设置
    语法
http://user:password@host:port

支持SOCKS协议

2.3正则表达式

1.实例引入

匹配URL

[a-zA-z]+://[^\s]*

^开头;\s匹配空白字符,*匹配前面任意多个字符。

python的re库

2.match

^Hello\s\d\d\d\s\d{4}\s\w{10}

{4}匹配前面的规则四次
\d 数字 ;\w字母与字符串

输出结果:
SRE_Match对象,成功匹配
<re.Match object; span=(0, 25), match=‘Hello 123 4567 World_This’>

span表示匹配到的对象在原字符串的范围index。

  • 匹配目标
    ()括号将欲提取的子字符串括起来,每个子表达式对应一个group。
  • 通用匹配
 '^Hello.*Demo$'

.点匹配除换行符外的任意字符。$结尾
.贪婪匹配,会尽可能多地匹配,占用其他表达式
.
?非贪婪匹配,尽可能少匹配,可以为空。字符串中间尽量使用非贪婪匹配,若在字符串结尾,可能匹配不到内容。

  • 修饰符
 result = re.match('^Hello\s(\d+)\sWorld', content,re.S)

re.S是匹配内容包括换行符在内的所有字符。
re.I对大小写不敏感。

  • 转义匹配
    \转义符

3.search

re.match:如果不是起始位置匹配成功的话,match()就返回none。span(0,)只能从0开始
re.search:依次扫描字符串,直到找到首个符合规则的字符串,返回匹配内容。注意,只匹配第一个

4.findall

搜索整个字符串,返回匹配正则表达式。

5.sub

替换

6.compile

将正则字符串编译封装为正则表达式对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值