本文共 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/