网络爬虫与信息提取
- VSCODE 开发工具
Requests 库自动爬去HTML页面 信息
安装requests库
使用requests 库
- 引入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()
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证书路径
robots.txt 网络爬虫排除标准
Beautiful Soup 解析HTML页面
安装BeautifulSoup 库
pip install beautifulsoup4
查看库安装情况
pip list
简单实例
import requests
from bs4 import BeautifulSoup
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模块的七重境界
- 第一重(固定字符串查找)
import re
text='升高:188,体重:167,年龄29,学号:0927,电话:110'
a=re.findall(r'188',text)
print(a)
- 第二重(找到数字类型字符)
import re
text='升高:188,体重:167,年龄29,学号:0927,电话:110'
a=re.findall(r'\d',text)
print(a)
- 第三重(查找多个数字类型或者出标点符号类字符)
import re
text='升高:188,体重:167,年龄29,学号:0927,电话:110'
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'
a=re.findall(r'1\d{10}|\w+@qq.com',text)
print(a)
- 第六重(限定位置, 如:文章开头或者结尾)
import re
text='手机号:18500009999,邮箱:1498999631@qq.com'
a=re.findall(r'^1\d{10}|\w+@qq.com$',text)
print(a)
- 第七重(内部约束)
import re
text='手机号:18500009999,邮箱:1498999631@qq.com'
a=re.findall(r'(?<=邮箱.)\w+@qq.com',text)
print(a)
|