Python爬虫之利用正则表达式爬取内涵吧(python正则表达式菜鸟教程)

网友投稿 312 2022-08-26


Python爬虫之利用正则表达式爬取内涵吧(python正则表达式菜鸟教程)

首先,我们来看一下,爬虫前基本的知识点概括

一. match()方法:

这个方法会从字符串的开头去匹配(也可以指定开始的位置),如果在开始没有找到,立即返回None,匹配到一个结果,就不再匹配。

我们可以指定开始的位置的索引是3,范围是3-10,那么python将从第4个字符'1'开始匹配,只匹配一个结果。

group()获得一个或多个分组的字符串,指定多个字符串时将以元组的形式返回,group(0)代表整个匹配的字串,不填写参数时,group()返回的是group(0)。

1 import re 2 3 pattern = re.compile(r'\d+') #匹配数字一次以上 4 m = pattern.match('one123two456') 5 print m 6 print m.group() 7 8 #None 9 #...AttributeError: 'NoneType' object has no attribute 'group'10 11 12 pattern = re.compile(r'\d+') #匹配数字一次以上13 m = pattern.match('one123two456'. 3, 10)14 print m15 print m.group()16 17 #<_sre.SRE_Match object at 0x00000000026FAE68>18 #123

二. search()方法:

search方法与match比较类似,区别在于match()方法只检测是不是在字符串的开始位置匹配,search()会扫描整个字符串查找匹配,同样,search方法只匹配一次。

1 import re2 3 pattern = re.compile(r'\d+')4 m = pattern.search('one123two456')5 print m.group()6 7 #123

三. findall()方法:

搜索字符串,以列表的形式返回全部能匹配的字串。

1 import re2 3 pattern = re.compile(r'\d+')4 m = pattern.findall('one123two456')5 print m6 7 #['123', '456']

四. sub()方法:

用来替换每一个匹配的字符串,并返回替换后的字符串。

1 import re2 3 pattern = re.compile(r'\d+')4 m = pattern.sub('abc', 'one123two456')5 print m6 7 #oneabctwo456

五. 实践:爬取内涵吧段子

1 #-*-coding:utf-8-*- 2 3 import requests 4 import re 5 6 class Spider: 7 8 def __init__(self): 9 self.page = 110 11 def getPage(self, page):12 url = " response = requests.get(url)14 contents = response.content.decode('gbk') #查看网页源代码,内涵吧默认编码是charset=gb231215 return contents16 17 def getContent(self):18 contents = self.getPage(self.page) 19 pattern = re.compile('

.*?(.*?).*?class="f18 mb20">(.*?)

', re.S)20 results = pattern.findall(contents)21 contents = []22 for item in results:23 title = re.sub('|', "", item[0])24 content = re.sub(r'

|

|
|&\w+;||
|

', "", item[1])25 content = re.sub(r'

|

|

', "", content)26 content = re.sub(r'
|
', "", content)27 content = re.sub(r'', "", content)28 contents.append([title, content])29 return contents30 31 def save_Data(self):32 file = open("duanzi.txt", "w+")33 x = 134 y = 135 for self.page in range(0, 507):36 contents = self.getContent()37 print u"正在写入第%d页的数据..." %(self.page+1)38 for item in contents:39 file.write(str(x) + "." + item[0])40 file.write("\n")41 file.write(item[1])42 file.write("=====================================================================================\n\n")43 if item==contents[-1]:44 file.write(u"********第" + str(y) + "页完********\n\n")45 y += 146 x += 1 47 print u"所有页面已加载完"48 49 def start(self):50 self.save_Data()51 52 53 spider = Spider()54 spider.start()

基本上可以获取段子的标题和内容,但由于内涵吧的段子越到后面标签越复杂,所以给替换标签带来了很大的难度。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot集成junit编写单元测试实战
下一篇:解决:return _compile(pattern, flags).search(string) TypeError: expected string or buffer(解决的拼音)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~