python 糗事百科爬虫
最近在学习python 爬虫——《精通python网络爬虫》,对着书上代码抄弄好了好久,都没有成功。在网上搜了一下,发现正则匹配可以用一个规则进行分组。
在处理匹配结果,本来想用字典,处理换行和标签,发现自己不会,但内容是字符串,可以重新赋值再进行处理。
这个爬虫没有网络上其他写的功能健全,还不能对包含图片的段子进行处理,但是自己的第一个能跑动的爬虫
import re,urllib.request def getconment(url,page): headers = ('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0') opener = urllib.request.build_opener() opener.addheaders = [headers] urllib.request.install_opener(opener) data = urllib.request.urlopen(url).read().decode('utf-8') #分组匹配,匹配出的记过是一个列表,列表中的值是元组 pater = '<div class="author.*?<h2>(.*?)</h2>.*?<span>(.*?)</span>.*?<i class="number">(.*?)</i>' content = re.compile(pater,re.S).findall(data) # print(content) for item in content: user = item[0].replace('\n','') duanzi = item[1].replace('\n','').replace('<br/>','\n')#匹配后的数据有\n换行,还有html的标签,将其进行替换 # 段子内容超长,进行换行 if len(duanzi) > 100: duanzi = duanzi[:100] + '\n' + duanzi[100:200] + '\n' + duanzi[200:]#此处没找到更好的方式处理超长,只能用字符串拼接 print('第'+str(page)+'页 作者:'+ user+ ' 点赞:'+str(item[2])+ '\n'+ '段子:' + duanzi + '\n')
#print('第' + str(page) + '页 作者:' + item[0].strip() + ' 点赞:' + str(item[2]) + '\n' + '段子:' + item[1].strip() + '\n') 可以只用这一段,只能去除\n,但段子中的<br/>仍然存在,长段子无法换行显示 for i in range(1,3): url = "https://www.qiushibaike.com/8hr/page/" + str(i) getconment(url,i)
strip参考http://www.runoob.com/python/att-string-strip.html