贴吧助手web版

 找回密码
 立即注册
搜索
查看: 1091|回复: 0

Python3之百度贴吧小爬虫

[复制链接]
     紫钻仅向指定用户开放  
  • TA的每日心情
    不屑
    前天 19:07
  • 签到天数: 1039 天

    [LV.10]以坛为家III

    674

    主题

    1442

    帖子

    1484

    积分

    管理员

    Rank: 15Rank: 15Rank: 15Rank: 15

    金币
    3355

    接口达人工具作者土豪之星

    发表于 2018-6-23 17:50:08 | 显示全部楼层 |阅读模式
    1. import urllib.request
    2. from bs4 import BeautifulSoup
    3. import csv
    4. import time
    5. import random

    6. #计算运行时间
    7. start_time = time.time()

    8. #保存到csv中
    9. csvFile = open(r"E:\Python\Projects\贴吧\华为\huawei.csv",'a+',newline='')
    10. writer =  csv.writer(csvFile)writer.writerow(('posting_num','posting_title','posting_coments_num','posting_user_link','posting_user_name'))

    11. #每页加50,共6940页
    12. base_url = 'http://tieba.baidu.com/f?kw=%E5%8D%8E%E4%B8%BA&ie=utf-8&pn='
    13. posting_num = 1  #计数爬取到第几个帖子
    14. for page in range(0,6942):  #一共6942页   
    15.     time_delay = random.randint(1, 3)  # 设置随机延迟时间,防止频繁的爬取导致百度封锁ID   
    16.     url = base_url + str(page * 50)   
    17.     html = urllib.request.urlopen(url)   
    18.     bsObj = BeautifulSoup(html,'lxml')   
    19.     posting_list = bsObj.find_all('div',{'class':'t_con cleafix'})    #查找标题块内各个信息, 标题、回复数、发帖人      
    20.    
    21.     print('============================')        
    22.     print('正在抓取华为贴吧第%d页' % page)    now_time = time.time()      
    23.     has_spent_seconds = now_time - start_time   
    24.     has_spent_time_int = int((now_time - start_time) / 60)   
    25.     print('华为号小爬虫已耗时%d分钟' % has_spent_time_int)   
    26.     if page > 1:        
    27.         will_need_time = ((6940 * has_spent_seconds) / page)/60        
    28.         will_need_time = int(will_need_time)        
    29.         print('华为号小爬虫还要爬%d分钟'%will_need_time)   
    30.     #页面查找posting_coments_num,
    31.     for posting in posting_list:
    32.         try:
    33.             # posting_coments_num
    34.             posting_coments_num = posting.contents[1].span.contents[0]

    35.             #posting_user_name
    36.             posting_user_name =  posting.contents[3].span.contents[1].a.contents[0]

    37.             #posting_user_link
    38.             posting_user_link = 'http://tieba.baidu.com' + posting.contents[3].span.contents[1].a.attrs['href']

    39.             #posting_title
    40.             posting_title = posting.contents[3].contents[1].contents[1].a.attrs['title']

    41.             #帖子数加1
    42.             posting_num = posting_num + 1

    43.             #数据保存
    44.             writer.writerow((posting_num, posting_title, posting_coments_num, posting_user_link, posting_user_name))

    45.         except:
    46.             continue

    47.     #抓数据每翻一页休息时间
    48.     time.sleep(time_delay)
    49.     #抓取了十页就休息3秒
    50.     if page in list(range(1,6940,10)):
    51.         time.sleep(3)


    52. # 遍历完网站关闭csvFile
    53. csvFile.close()

    54. end_time = time.time()
    55. duration_time = int((end_time - start_time)/60)
    56. print('程序运行了%d分钟'%duration_time)


    复制代码

    程序爬了6000页就被百度封掉,你们回去可以改下贴吧的,比如爬小米吧或者其他娱乐的吧,将页面数改成小于6000的,应该不会被封掉。按照我写的代码,我爬6000页用了180分钟。结果如图,403forbiden,被百度封掉了。






    爬这些也可以了,csv文件39M,共计300000条帖子信息。




    上一篇:如何运营好一个大学贴吧或论坛?
    下一篇:百度贴吧数据分析
    喵星人贴吧助手你值得拥有
    回复

    使用道具 举报

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

    本版积分规则

    网站地图|Archiver|手机版|小黑屋|贴吧助手web版

    Copyright © 2016-2020 TieBaZSTool by TieBaZSAll Rights Reserved.

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