正则表达式与网页爬虫【re与urllib】简单使用
一、Python正则表达式
这个比较基础 大概 不是太细 这篇博文【https://blog.csdn.net/qq_43636709/article/details/107140529】后面有几个比较好的实例 可以拿来练手
1、正则表达式的概念
通过一组特殊的字符串按照指定的序列定义的一种规则,称为正则表达式。
2、正则表达式的主要作用
主要用于用户输入的数据进行验证,验证用户输入的数据是否符合定义的规则。
3、正则表达式基本语法
例如对手机号码进行正则表达式的编写
reg=^1[35789]\d{9}$
^:表示开始
1:表示第一个字符为数字1
\d:表示数字
{n}:n表示数字的个数,表示任意n个数字
+:表示1到n次,字符串出现的次数
*:表示0到n次,字符串出现的次数
?:表示0到1次
w:表示任意字母
4、python中使用re模块定义正则
import re
5、re中常用的方法
(1) match方法
从第一个字符开始匹配,如果第一个起始字符不匹配,则返回None
import re s=“www.sohu.com” print(re.match(“www”,s).span()) #返回匹配的字符串的位置 print(re.match(“com”,s))#与起始字符串不匹配,返回None 运行效果如下: (0, 3) None
(2) 使用group方法进行正则匹配
分组根据正则表达式匹配指定的字符,并返回字符信息
lin="Cats are smarter than dog"
matchObj=re.match(r'(.*)are(.*?)',lin,re.M|re.I) #定义正则表达式并与lin中 的字符串进行比对re.M表示多行匹配,re.I表示忽略大小写
print(matchObj.group())#匹配are之前的所有字符
print(matchObj.group(1))#匹配are之前的第1个位置的字符
print(matchObj.group(2))#匹配are之前的第2个位置的字符
(3) seach方法
扫描整个字符串并进行比对,返回第1个成功的匹配位置
import re
s="www.sohu.com"
print(re.search("www",s))
print(re.search("com",s))
结果如下: <re.Match object; span=(0, 3), match='www'> <re.Match object; span=(9, 12), match='com'>
二、python中的爬虫
1、主要用于爬取网页中的数据
2、当前网络传输协议
(1) http协议:超文本传输协议,传输的数据格式为html(超文本标记语言)
(2) Https协议:具有安全验证的超文本传输协议,加入了ssl安全证书
(3) ssl:安全套接字协议证书
3、http请求的方式
(1)GET请求方式:请求的参数信息会显示在地址栏中,传输的参数个数不能超过255个字符。
(2)POST请求方式:请求的信息是隐藏的,不会显示在地址栏中,向服务器传递的数据可以达到20M。
4、URL
统一资源定位,实际为请求的网络资源地址。
例如:
http://www.sohu.com/index.html
5、请求的状态码
(1)200:表示请求的资源已响应成功。
(2)404:表示资源不存在
(3)500:请求资源成功,但是服务器内部错误
(4)403:请求的服务器忙,无法响应。
6、网页请求的调试工具
(1) Fiddler:用于调试请求响应的页面信息
(2) 浏览器自带的调试工具,按F12显示调试的网页信息
7、使用urllib爬取网页信息
(1) python3以上版本使用urllib2,引入的组件库为:
import urllib.request
(2) 获取html对象的方法
html=urllib.request.urlopen(“url地址”)
例如,获取百度首页信息
html=urllib.request.urlopen(“http://www.baidu.com”)
(3) 读取网页信息
x=html.read()
完整的请求响应代码如下所示:
import urllib.request #获取请求对象
request=urllib.request.Request("https://www.sohu.com")
#User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 request.add_header("User-Agent","Mozilla/5.0") #用于反爬虫处理,伪装为火狐浏览器访问
response=urllib.request.urlopen(request)
print("请求响应的状态码:",response.getcode())
print("获取请求的网站地址:",response.geturl())
print(response.read())
(4) 使用urllibencode转换字典为搜索的url字符串格式
Urllib.parse.urlencode(字典对象)
示例如下:从键盘输入要搜索的信息进行baidu查询
import urllib.request
import os
base_url="https://www.baidu.com/s?"
seacherString=input("请输入要查找的信息:")
dic={'wd':seacherString}
sc=urllib.parse.urlencode(dic) #转换字典为搜索字符串信息
full_url=base_url+sc #拼接要搜索的url地址信息
print("要所搜的信息为:",full_url)
request=urllib.request.Request(full_url) #获取请求对象
#User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 request.add_header("User-Agent","Mozilla/5.0") #用于反爬虫处理,伪装为火狐浏览器访问
response=urllib.request.urlopen(request)
print(response.read())