博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1.python爬虫基础——正则表达式
阅读量:6620 次
发布时间:2019-06-25

本文共 2672 字,大约阅读时间需要 8 分钟。

#python网络爬虫#通用网络爬虫(没有目的,爬去所有的URL)  聚焦网络爬虫(过滤无关的链接)#python数据分析与挖掘实战的正则表达式#正则表达式  世界上信息非常多,而我们关注的信息有限。假如我们希望只提取出关注数据,此时可以通过一些表达式进行提取,正则表达式就是其中一种进行数据筛选的表达式。#原子#原子是正则表达式中最基本的组成单位,每个正则表达式中至少要包含一个原子。#常见的原子类型有:普通字符作为原子,非打印字符作为原子,通用字符作为原子,原子表import repat="yue"         #普通字符作为原子string="http://yum.iqianyue.com"rst=re.search(pat,string)print(rst)pat1="\n"  #\n  \t            #非打印字符作为原子string1='''dsfjsdjfsdfsdfsdfsdf'''rst1=re.search(pat1,string1)print(rst1)pat2="\w\dpython\w"#\w 通用字符,匹配任意字母,数字,下划线#\d 匹配任意一个十进制数       #\S 除了十进制数的任意#|s 匹配空白字符       #\S 除了空白字符的任意字符#\W 匹配任意一个除了字母,数字,下划线的东西string2="hsdlfsga7pythonkdfshdskjf"rst2=re.search(pat2,string2)print(rst2)pat3="pyth[jsz]n"           #原子表  定义一组平等的字符string3="fsdjfpythjnjslkdfpythsnjfsjpythjsnfsd"rst3=re.search(pat3,string3)print(rst3)#元字符#正则表达式中具有一些特殊含义的字符,比如重复N次前面的字符等#. 匹配任意字符#^ 匹配字符串中的开始位置#$ 匹配字符串中结束的位置#* 匹配0次 1次或者多次的前面的原子#?匹配0次或者1次前面的原子#+ 匹配一次或多次前面的原子#{3} 前面的原子恰好出现了3次  并且连在一起的#{n} 出现了n次#{4,7} 至少出现4次  之多出现7次  {4,}#t|s  出现t或者s#() 提取某一个内容pat4=".python..."string4="sjslkdjfpythonslfjshf"rst4=re.search(pat4,string4)print(rst4)pat5="python|php"string5="jfsdjphpjsljfspythonfsd"rst5=re.search(pat5,string5)print(rst5)#模式修正符#可以在不改变正则表达式的情况下,通过模式修正符改变正则表达式的含义,从而实现一些匹配结果的调整等功能#I 使正则表达式不区分大小写#M 多行匹配#L 本地化识别匹配#U 根据Unicode解析字符#S 让点也能匹配包括换行符pat6="python"pat7="python"string6="sjljfaljafPythonsfjlsjfssfs"rst6=re.search(pat6,string6)print(rst6)rst7=re.search(pat7,string6,re.I)    #模式修正符实例,不区分大小写print(rst7)#贪婪模式和懒惰模式#贪婪模式尽可能的多的去匹配   #懒惰模式尽可能少的去匹配pat8="p.*y"   #贪婪模式 更多的去覆盖pat9="p.*?y"  #懒惰模式 更精准的定位string8="jlsjfhspythonslfjshdpy"rst8=re.search(pat8,string8)rst9=re.search(pat9,string8)print(rst8)print(rst9)#正则表达式函数#正则表达式函数有re.match()函数,re.search()函数,全局匹配函数,re.sub()函数#re.search()  从字符串中搜索出来#re.match()   从头开始匹配,如果一开始没有,那么就返回None#全局匹配函数#re.sub()     主要用于替换string10="phskfhskjhfkjshfjksgjfyskjhfksdh"rst10=re.match(pat8,string10)print(rst10)rst11=re.compile(pat8).findall(string10)   #全局搜索函数  显示所有满足条件的  后面用的最多print(rst11)#常见正则表达式实例#匹配.com .cn网址pat="[a-zA-Z]+://[^\s]*[.com|.cn]"string='fjsljflds'rst=re.compile(pat).findall(string)print(rst)#简单的爬虫,如何爬取csdn某个课程页面上的QQ群pat="

(\d*?)

"import urllib.requestdata=urllib.request.urlopen("http://edu.csdn.net/huiyiCourse/detail/215").read()rst=re.compile(pat).findall(str(data))print(rst)#作业:如何爬取豆瓣出版社列表并写入文件中#豆瓣网址:https://read.douban.com/provider/allimport urllib.requestimport redata=urllib.request.urlopen("https://read.douban.com/provider/all").read()data=data.decode("utf-8")pat='
(.*?)
'mydata=re.compile(pat).findall(data)print(mydata)fh=open("/Users/xubin/myapp/pythonfile/出版社file4.txt","w")for i in range(0,len(mydata)): fh.write(mydata[i]+"\n")fh.close()

转载地址:http://gqupo.baihongyu.com/

你可能感兴趣的文章
oracle取前几行|中间几行|后几行
查看>>
16.1 Tomcat介绍
查看>>
QuickBI助你成为分析师——数据源FAQ小结
查看>>
十周三次课
查看>>
2008 AD 复制有防火墙要开什么端口
查看>>
我的友情链接
查看>>
敏友的【敏捷个人】有感(11): 敏捷个人线下活动有感
查看>>
刺激用户危机意识,实现快速盈利的营销思维
查看>>
植物大战僵尸
查看>>
原创文章
查看>>
理解JavaScript私有作用域
查看>>
BZOJ 1012: [JSOI2008]最大数maxnumber【线段树单点更新求最值,单调队列,多解】
查看>>
Drupal 7模板(主题钩子)的建议
查看>>
nginx配置文件中location说明
查看>>
连载-第1章绪论 1.1嵌入式系统概述
查看>>
UltraVNC
查看>>
详解synchronized
查看>>
Spring Cloud第二篇 创建一个Eureka Server
查看>>
初探数据双向绑定
查看>>
Webpack4 不深不浅的实践教程
查看>>