Python+正则表达式编写多线程百度贴吧网页爬虫

其实本来是想做一个利用Python+XPath的贴吧爬虫,但是遇到了一些很奇怪的问题搞了一天也没有解决,所以只有用简单的正则表达式来代替XPath。
这个小爬虫是用于爬取一个帖子所有的回帖人+回帖内容+回帖时间,并导出到本地的文件中保存。本次测试的贴吧地址为:https://tieba.baidu.com/p/3905531791?pn中1-5页的所有内容。
利用多线程可以大大提高爬虫爬取速度,提高程序的效率。
因为百度贴吧的网页源码随时可能会改动,源码改动可能会导致正则表达式匹配不到正确的结果,所以这个爬虫具有一定的时效性。爬虫代码是根据最新的贴吧网页源码制作,若有变更,请读者自行修改。

# -*- coding:utf-8 -*-
from multiprocessing.dummy import Pool as ThreadPool
import requests
import re
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

def write(content):  #将数据保存至本地文件中
    f.writelines(u'回帖人:'+str(content['user_name'])+'\n')
    f.writelines(u'回帖时间:'+str(content['reply_time'])+'\n')
    f.writelines(u'回帖内容:'+unicode(content['content'])+'\n'+'\n')

def spider_Re(url):    #利用正则表达式匹配提取网页信息
    html = requests.get(url)
    content_field = re.findall('<ul class="p_author">(.*?)<div class="j_lzl_container core_reply_wrapper',html.text,re.S)
    item = {}
    for each in content_field:
        author = re.search('target="_blank">(.*?)</a>',each,re.S).group(1)
        content = re.search('class="d_post_content j_d_post_content ">(.*?)</div><br>            </cc>',each,re.S).group(1).replace('<br>','\n')
        reply_time = re.search('''[^/a>]</span><span class="tail-info">(.*?)</span></div>''',each,re.S).group(1)
        print content
        print author
        print reply_time
        item['user_name'] = author
        item['content'] = content
        item['reply_time'] = reply_time
        write(item)

if __name__ == '__main__':
    pool = ThreadPool(4)   #参数取决于CPU的核心数
    f = open('content.txt','w')
    page=[]
    for i in range(1,6):  #1到总页数+1
        newpage = 'https://tieba.baidu.com/p/3905531791?pn=' + str(i)
        page.append(newpage)
    results = pool.map(spider_Re,page)
    pool.close()
    pool.join()
    f.close()

这样基本就可以完成贴吧网页的爬取了。
如:

回帖人:jin70908469
回帖内容:            游戏背景
职业介绍
巫师系列剧情讲解视频
巫师前作故事梗概
攻略心得,有些可能含有本作剧透,慎入!
官方英文版攻略PDF 
影响结局的选项
纯堆DPS加点
法印流加点
三种流派的主要人物加点和培养<a href="http://jump2.bdimg.com/safecheck/index?url=x+Z5mMbGPAs95UolpNuq+CwM2BpViN6QF0BYrUCVRu8ACvHfW52JIJiw9jD7zZ68yExmB9N/65I="  target="_blank">http://tieba.baidu.com/p/3787258057</a>
全地图技能点收集(魔力之所)<a href="http://jump2.bdimg.com/safecheck/index?url=x+Z5mMbGPAs95UolpNuq+CwM2BpViN6QF0BYrUCVRu9mNjDqZl39tlDLvtcpYTbcyExmB9N/65I="  target="_blank">http://tieba.baidu.com/p/3787534924</a>
所有魔力之所,昆特牌玩家和销售卡牌的旅行者的位置<a href="http://jump2.bdimg.com/safecheck/index?url=x+Z5mMbGPAs95UolpNuq+CwM2BpViN6QF0BYrUCVRu9OnJoDv3V75Ppbi42L2g7XITkBmfiS/WpWpoifrx0i/9hNVf7JU91BgLHy2pejPhpWpoifrx0i/7Cj68W1k+ZNAG+4Cm4FSU0="  target="_blank">http://tieba.baidu.com/p/3790700051?pid=69022101270&amp;cid=0#69022101270</a>
昆特牌全面解析<a href="http://jump2.bdimg.com/safecheck/index?url=x+Z5mMbGPAs95UolpNuq+CwM2BpViN6QF0BYrUCVRu8HXtSL9TnUr8YC6GYK0gQGyExmB9N/65I="  target="_blank">http://tieba.baidu.com/p/3806546863</a>
所有昆特牌收集<a href="http://jump2.bdimg.com/safecheck/index?url=x+Z5mMbGPAs95UolpNuq+CwM2BpViN6QF0BYrUCVRu/f6TYTK+5+oR33i2kCddzcyExmB9N/65I="  target="_blank">http://tieba.baidu.com/p/3794649067</a>

仔细地看爬取出的文件信息就可以发现,回帖内容中会出现大量的类似于
<a href="......">http://.......</a><img .....>之类的标签内容,非常影响观感。
于是我尝试使用正则表达式清除这类标签信息,保留超链接标签中的文字。
添加下列代码:

    content = re.sub('''<a\shref=".*?>''', '', content, re.S).replace('</a>', '') #匹配删除<a href=""></a>标签
    content = re.sub('''<img\sclass=".*?>''','',content,re.S)  #匹配删除<img>标签

这样大部分的标签就可以被删除:(有少部分还是删不掉不知道什么原因,请大神留言解答)

回帖人:jin70908469
回帖时间:2015-07-19 17:48
回帖内容:            游戏背景
12代的游戏资源这里就不提供了,有意者可到相应贴吧或各大游戏网站自行寻找。
不想玩前作或是没时间的吧友可阅读以下背景介绍。
机核网制作的猎魔人系列背景介绍http://www.g-cores.com/witcher#charactor
“猎魔人”系列的前世今生http://tieba.baidu.com/p/2167716421
猎魔人的世界[小说剧透] http://tieba.baidu.com/p/3109151723
狩魔猎人职业介绍http://tieba.baidu.com/p/3710504558
巫师系列剧情讲解视频http://tieba.baidu.com/p/3693416865
巫师前作故事梗概http://tieba.baidu.com/p/3736572554

攻略心得,有些可能含有本作剧透,慎入!
官方英文版攻略PDF http://pan.baidu.com/s/1jGgT706
影响结局的选项http://tieba.baidu.com/p/3821337556
纯堆DPS加点http://tieba.baidu.com/p/3784395921
法印流加点http://tieba.baidu.com/p/3793006353
三种流派的主要人物加点和培养http://tieba.baidu.com/p/3787258057
全地图技能点收集(魔力之所)http://tieba.baidu.com/p/3787534924
所有魔力之所,昆特牌玩家和销售卡牌的旅行者的位置http://tieba.baidu.com/p/3790700051?pid=69022101270&amp;cid=0#69022101270
昆特牌全面解析http://tieba.baidu.com/p/3806546863
所有昆特牌收集http://tieba.baidu.com/p/3794649067
TW3在线官方地图 http://thewitcher.com/map

关于XPath版本的贴吧爬虫我会找机会再研究研究,成功后再发表分享。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值