首先大家都知道re.sub()简单用法:
#re.sub()会替换满足条件的所有式子,返回被替换后的文本
text = "阅读量 9999, 点赞量 7788"
ret_sub = re.sub(r'\d+', '8800', text)
结果:
阅读量 8800, 点赞量 8800
但是有陷阱:这个例子之所以匹配全部成功是因为它所检查的是'\d',也就是数字格式,遇到不是数字的就停止了
现在做另一个例子,我们找了一个网页准备爬它的数据:
今天这个例子先直接复制下来,可以看到数据很乱,嵌套着很多标签,我们接下来要清洗这些数据,那就是把这些标签去掉,只留文字,在说sub方法之前还有一个问题:我第一次粘贴文本给test赋值时,代码为:
text = "1.通过爬虫技术,实现PMS系统与多个销售平台(airbnb、途家、美团榛果等)的订单房态同步、自动发房、价格调整工作;
工作职责:
2.完成智能定价所需要的数据爬取及数据分析等工作;
3.完成IM针对房源咨询的自动回复的开发工作。
任职资格:
1、Python基础良好,2-4年相关岗位工作经验;
2、大学全日本制本科及以上学历;
3、掌握网络爬虫基本类库使用,了解爬虫架构且熟练使用至少一种爬虫框架(Scrapy、PySpider等)进行开发,了解反爬虫、反反爬机制;
4、熟悉WebDriver、Selenium、PhantomJS等常用工具;
5、具有一定前端基础,拥有分析结构化和非结构化数据能力;
6、掌握正则表达式、搜索策略、算法、数据聚类以及重组并可以独立完成对抓取数据进行信息提取、去重和清洗;
7、熟练使用MySQL数据库,了解非关系型数据库(Redis、MongoDB等);
8、了解Scrapy+Redis分布式策略为加分项。
"
结果疯狂报错,我????怎么粘贴个文本还有错了,百度无果,突然想到引号匹配的问题:test字符串用双引号包裹,div标签里也有双引号,直接配对,导致错误,解决方法就是要么把文本里的双引号转义,要么改外面包裹的双引号,标签很多,可想有多麻烦,直接把外层双引号改为三引号,问题解决!接下来说正题:
要去掉标签,可以想到那就用re.sub()方法,用空字符串去替代每个标签,初始想法:
text = re.sub(r'<.*>', "", text)
这样做了之后可以发现结果是全空,接下来又加了
text = re.sub(r"^<.*>", "", text)
发现结果是只过滤掉了第一个标签,接下来的数据全没有动,百度了一下,发现原来是换行出了问题,匹配到第一个 接下来的数据就没有换行了,但是结果还不正确,又出现了全空,百度了也没有结果,突然想到以前做爬虫常用的正则是:*后面跟?,继续百度,找到了问题所在: .*具有贪婪的性质,首先匹配到不能匹配为止,根据后面的正则表达式,会进行回溯。.*?则相反,一个匹配以后,就往下进行,所以不会进行回溯,具有最小匹配的性质。 我们虽然没有换行符了,但是.*条件一直满足,一直贪婪下去,则一直匹配到了末尾 ,而?则成为非贪婪,匹配到了一个就停止继续下一个匹配。那么改了之后的代码: 1.通过爬虫技术,实现PMS系统与多个销售平台(airbnb、途家、美团榛果等)的订单房态同步、自动发房、价格调整工作; 工作职责: 2.完成智能定价所需要的数据爬取及数据分析等工作; 3.完成IM针对房源咨询的自动回复的开发工作。 任职资格: 1、Python基础良好,2-4年相关岗位工作经验; 2、大学全日本制本科及以上学历; 3、掌握网络爬虫基本类库使用,了解爬虫架构且熟练使用至少一种爬虫框架(Scrapy、PySpider等)进行开发,了解反爬虫、反反爬机制; 4、熟悉WebDriver、Selenium、PhantomJS等常用工具; 5、具有一定前端基础,拥有分析结构化和非结构化数据能力; 6、掌握正则表达式、搜索策略、算法、数据聚类以及重组并可以独立完成对抓取数据进行信息提取、去重和清洗; 7、熟练使用MySQL数据库,了解非关系型数据库(Redis、MongoDB等); 8、了解Scrapy+Redis分布式策略为加分项。 运行结果: 问题解决!赏心悦目! text = re.sub(r'\n+', '', text)
text = '''