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

posted @ 2018-05-08 16:26  Aaron007  阅读(108)  评论(0编辑  收藏  举报