Python 获取div标签中的文字实例
预备知识点
compile函数
compile函数用于编译正则表达式,生成一个正则表达式(Pattern)对象,供match()和search()这两个函数使用。
语法格式为:
re.compile(pattern[,flags]) .compile(pattern[,flags])
参数:
pattern:一个字符串形式的正则表达式
flags可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
re.I忽略大小写
re.L表示特殊字符集\w,\W,\b,\B,\s,\S依赖于当前环境
re.M多行模式
re.S即为'.'并且包括换行符在内的任意字符('.'不包括换行符)
re.U表示特殊字符集\w,\W,\b,\B,\d,\D,\s,\S依赖于Unicode字符属性数据库
re.X为了增加可读性,忽略空格和'#'后面的注释
检索和替换
Python的re模块提供了re.sub用于替换字符串中的匹配项。
语法:
re.sub(pattern,repl,string,count=0) .sub(pattern,repl,string,count=0)
参数:
pattern:正则中的模式字符串。
repl:替换的字符串,也可为一个函数。
string:要被查找替换的原始字符串。
count:模式匹配后替换的最大次数,默认0表示替换所有的匹配。
Python中字符串前面加上r表示原生字符串,与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
思路整理:
在编程过程中遇到的部分问题在这里写出来和大家共享
问题1:在编程过程中成功获取了目标的名字,但是它存在于div框架中,我们要做的就是将div中的文字与标签分开,在这里我们用的是正则表达式
问题2:
上代码:
#-*-coding:UTF-8-*- importrequests importtime importre frombs4importBeautifulSoup fromurllib.requestimporturlretrieve if__name__=='__main__': list_url=[] url='https://www.names.org/n/kevin/about' #设置请求头信息 headers={ "User-Agent":"Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/58.0.3029.110Safari/537.36" } req=requests.get(url=url,headers=headers) req.encoding='utf-8' html=req.text bf=BeautifulSoup(html,'html.parser') targets_url_1=bf.find_all(class_='containerpage-section') bf=BeautifulSoup(str(targets_url_1),'html.parser') targets_url_2=bf.find_all(class_='name') #保存名字链接 foreachintargets_url_2: list_url.append(re.sub('[\t\n]',"",re.sub(r'<[^>]+>',"",str(each)))) f=open('test.txt','w')#首先先创建一个文件对象,打开方式为w foreachinlist_url: f.writelines(each)#用readlines()方法写入文件 f.writelines('\n') print(list_url) print('下载完成!')
以上这篇Python获取div标签中的文字实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。