python一个关于贴吧的小爬虫(二)

上一篇文章中
用爬虫来获取omg战队吧首页的所有帖子的最后回复时间时间是否为一分钟,这一次用爬虫来爬取omg战队吧是否每分钟都有人回复帖子。

贴吧的回复机制(个人理解如下):如果有人回复一片帖子,那么这篇帖子就会更新到首页的置顶帖下面的第一个帖子的位置,因此只需要爬取贴吧首页的第一个帖子的最后回复时间并算出时间间隔即可。(并不管它是哪一篇帖子)

from bs4 import BeautifulSoup
import urllib.request
import time

def handlechapter(url):
    response = urllib.request.urlopen(url)
    html = response.read().decode('utf-8')
    return html

def judge(L1):
        for i in range(len(L1) - 1):
            count = 0
            if L1[i] - L1[i+1] > 50:
                count = L1[i] - (L1[i+1] + 60)
            else:
                count = L1[i] - L[i+1]
            if count != -1:
                print('并不是每分钟都有人回复')
                break
        else:
            print('每分钟都有人回复') 
url = 'https://tieba.baidu.com/f?kw=omg%E6%88%98%E9%98%9F&fr=fenter&prequery=omg'
L = []
L1 = []
start = time.time()
for i in range(6):
    html = handlechapter(url)
    url_soup = BeautifulSoup(html, 'html.parser')
    for a in url_soup.find_all("div", class_="pull_right"):
        grab_time = a.find_all("span")[1].get_text().strip()
        try:
            change_time = grab_time.split(':')[1]
            L.append(change_time)
        except:
            pass
    L1.append(int(L[0]))
    print(L1)
    L = []
    time.sleep(1)

end = time.time()
print('在 %d 分钟内' % int((end-start)/60))
judge(L1)

部分解释

url = 'https://tieba.baidu.com/f?kw=omg%E6%88%98%E9%98%9F&fr=fenter&prequery=omg'
L=[]
L1=[]                                             
start = time.time()
for i in range(6):
    html = handlechapter(url)
    url_soup = BeautifulSoup(html, 'html.parser')
    for a in url_soup.find_all("div", class_="pull_right"):
        grab_time = a.find_all("span")[1].get_text().strip()

在这里 意一下每次抓取完最后回复时间之后,要重新获取网页源码,因为此时随着时间的变化,网页源码已经改变,所以要重新获取网页源码。L来获取每次抓取的贴吧第一页所有帖子的最后回复时间,L1来获取首页的第一个帖子的最后回复时间。

time.sleep(60)

这个函数来创造时间间隔即停60秒之后在获取网页源码,更新最后回复时间。
更改一下judgle()函数的判断方式

def judge(L1):
        for i in range(len(L1) - 1):
            count = 0   
        '''
        如果当前最后回复时间的为21:59,下一分钟最后回复时间为22:00,要把分钟数转化为整数00就会变成0,因此要判断一下,避免正好跨小时的两个分钟数计算不准确的问题。
        '''
            if L1[i] - L1[i+1] > -50:
                count = L1[i] - (L1[i+1] + 60)
            else:
                count = L1[i] - L[i+1]
            if count != -1:
                print('并不是每分钟都有人回复')
                break
        else:
            print('每分钟都有人回复')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值