python 网络爬虫与信息提取(request库)

网络爬虫与信息提取

  1. VSCODE 开发工具

Requests 库自动爬去HTML页面 信息

安装requests库

在这里插入图片描述

使用requests 库

  1. 引入requests 库
  2. 用r.status_code 来分析响应状态码是否为200
  3. 用r.text 来分析响应内容
  4. 用r.encoding 来分析响应编码方式
  5. 用r.apparen_encoding 对响应内容编码方式分析
  6. 用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协议对资源的操作方法(请求方式)

  1. get查: 请求URL位置资源
  2. head查: 请求获取URL位置资源响应消息报告
  3. post增: 请求URL位置的资源后附加新的数据(一般用于提交表单)
  4. put增: 请求URL位置存储一个资源,覆盖URL位置资源
  5. patch改: 请求局部更新URL位置的资源,即改变该处资源的部分内容
  6. delete删: 请求删除URL 位置存储的资源
    ####patch和put 的区别
  7. put是全部重新定向(具有覆盖性)
  8. patch 则是将单一数据修改
    ###requests库13个控制访问参数(**kwargs)
    1. 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
      
      
    2. 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)
      
    3. 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)
      
    4. headers:字典,HTTP协议头

      import requests
      head={'user-agent':'Chrome/10'}
      r=requests.post('http://python123.io/ws',headers=head)
      
      print(r.url)
      
    5. cookies:字典或者CookieJar,Request中的cookie
      1. 查看cookie
      2. requests 库的cookie是用字典的形式展示的,而网页中的cookie是用;进行分割的
      3.

      
      
    6. auth:元组,支持HTTP认证功能

      
      
    7. files:字典类型,传输文件(可以向某一个链接提交某一个文件)

       import requests
      fs={'file':open('path','rb')}
      r=requests.post('http://python123.io/ws',file=fs)
      
    8. timeout:设定超时时间

      
      
    9. proxies:字典类型,设定访问代理服务器,可以增加登陆认证

      
      
    10. allow_redirects:重定向开关 (boolean)

      
      
    11. stream:获取内容立即下载开关(boolean)

      
      
    12. verify:认证SSL证书开关(boolean)

      
      
    13. cert:本地SSL证书路径

      
      

robots.txt 网络爬虫排除标准

Beautiful Soup 解析HTML页面

安装BeautifulSoup 库

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遍历标签下有哪些标签

Re 正则表达式库

	用来简洁表达一组字符串的方式
操作符说明实例
.表示任何单个字符
[]字符集,对单个字符给出取值范围[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]

re模块的七重境界

  1. 第一重(固定字符串查找)
import re
text='升高:188,体重:167,年龄29,学号:0927,电话:110'
# 假设查找一个固定字符串188
#text表示要查找的字符串
a=re.findall(r'188',text)
print(a)
  1. 第二重(找到数字类型字符)
import re
text='升高:188,体重:167,年龄29,学号:0927,电话:110'
# 假设查找所有单个数字字符 使用\d
a=re.findall(r'\d',text)
print(a)
  1. 第三重(查找多个数字类型或者出标点符号类字符)
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)
  1. 第五重( 查找两种不同排列结构的连贯字符串)
from cgi import print_arguments
import re
text='手机号:18500009999,邮箱:1498999631@qq.com'
#"|"表示两种不同排列结构的连贯字符串
# - 1\d{10}表示手机号
# - \w+@qq.com表示qq邮箱
a=re.findall(r'1\d{10}|\w+@qq.com',text)
print(a)
  1. 第六重(限定位置, 如:文章开头或者结尾)
import re
text='手机号:18500009999,邮箱:1498999631@qq.com'
# "^"表示文章开头开始匹配正则表达式
# "$"表示文章末尾开始匹配正则表达式
a=re.findall(r'^1\d{10}|\w+@qq.com$',text)
print(a)
  1. 第七重(内部约束)
import re
text='手机号:18500009999,邮箱:1498999631@qq.com'
#匹配邮箱后字符
a=re.findall(r'(?<=邮箱.)\w+@qq.com',text)
print(a)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈阳羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值