找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 5208|回复: 4

[代码与实例] python爬虫爬取百度贴吧列表数据

50

主题

1057

帖子

1108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1108

活跃会员热心会员最佳导师默默耕耘突出贡献优秀版主荣誉管理论坛元老

blueelwang 发表于 2016-8-19 19:04:32 | 显示全部楼层 |阅读模式
这是一个可以爬取百度贴吧列表爬虫
  1. #coding=utf-8
  2. import requests
  3. import re

  4. class spider():
  5.     def __init__(self):
  6.         print('爬虫启动.......')
  7.     def getSource(self,url):
  8.         html=requests.get(url).text
  9.         return html
  10.     def changePage(self,url,num_total):
  11.         changePage=[]
  12.         for each in range(1,num_total+1,50):
  13.             urlNow=re.sub('pn=(\d+)', 'pn=%s'%each, url,re.S)
  14.             changePage.append(urlNow)
  15.         return changePage
  16.     def getmyideaInfo(self,source):
  17.         li=re.findall('<li class=" j_thread_list clearfix"(.*?)</li>', source, re.S)
  18.         return li
  19.     def getinfo(self,classinfo):
  20.         info={}
  21.         info['最后回复时间']=re.findall('<span class="threadlist_reply_date pull_right j_reply_data" title="最后回复时间">(.*?)</span>', classinfo, re.S)
  22.         info['回复人数']=re.findall('title="回复">(.*?)</span>', classinfo, re.S)
  23.         info['主题']=re.findall('target="_blank" class="j_th_tit ">(.*?)</a>', classinfo, re.S)
  24.         info['主题作者']=re.findall('title="主题作者:(.*?)"',classinfo,re.S)
  25.         info['内容']=re.findall('<div class="threadlist_abs threadlist_abs_onlyline ">(.*?)</div>', classinfo, re.S)
  26.         info['最后回复人']=re.findall(' <span class="tb_icon_author_rely j_replyer" title="最后回复人:(.*?)">', classinfo, re.S)
  27.         return info
  28.     def saveinfo(self,info):
  29.         f=open('infoTieba.txt','a')
  30.         for each in info:
  31.             try:
  32.                 f.writelines('回复人数'+''.join(each['回复人数'])+'\n')
  33.                 f.writelines('主题'+''.join(each['主题']).encode('utf-8')+'\n')
  34.                 f.writelines('主题作者'+''.join(each['主题作者']).encode('utf-8')+'\n')
  35.                 f.writelines('内容'+''.join(each['内容']).encode('utf-8')+'\n')
  36.                 f.writelines('最后回复人'+''.join(each['最后回复人'])+'\n\n')
  37.             except:
  38.                 pass
  39.         f.close()
  40.                  
  41.                
  42. if __name__=='__main__':
  43.     classInfo=[]
  44.     url='http://tieba.baidu.com/f?kw=%E5%8F%8C%E6%B1%9F%E4%B8%AD%E5%AD%A6&ie=utf-8&pn=1'
  45.     mySpider=spider()
  46.     netPage=mySpider.changePage(url, 1000)
  47.     for each in netPage:
  48.         print('正在处理:'+each)
  49.         html=mySpider.getSource(each)
  50.         oppo=mySpider.getmyideaInfo(html)
  51.         for i in oppo:
  52.             info=mySpider.getinfo(i)
  53.             classInfo.append(info)
  54.         mySpider.saveinfo(classInfo)
复制代码




回复

使用道具 举报

50

主题

1057

帖子

1108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1108

活跃会员热心会员最佳导师默默耕耘突出贡献优秀版主荣誉管理论坛元老

blueelwang  楼主| 发表于 2016-8-19 19:06:26 | 显示全部楼层
{:8_205:}
回复

使用道具 举报

0

主题

5

帖子

5

积分

贫民

积分
5
mote 发表于 2016-8-19 21:40:47 | 显示全部楼层
楼主,请问得到的infotieba.txt  乱码怎么解决?
回复 支持 反对

使用道具 举报

50

主题

1057

帖子

1108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1108

活跃会员热心会员最佳导师默默耕耘突出贡献优秀版主荣誉管理论坛元老

blueelwang  楼主| 发表于 2016-8-20 18:03:08 | 显示全部楼层
把这句改一下就行啦,f.writelines('主题'+''.join(each['主题']).encode('utf-8')+'\n')

我已经把上面的代码改过了你试一下
回复 支持 反对

使用道具 举报

0

主题

1

帖子

1

积分

贫民

积分
1
Evabook 发表于 2016-9-12 23:44:45 | 显示全部楼层
楼主,你好,我现在出现的问题是只要是re.findall里有中文的,都无法查找到,我用的是windows系统,请问有什么解决方法吗~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表