知乎热榜爬取

本文介绍了如何利用Python爬虫技术定时抓取知乎热榜,通过requests库获取HTML,BeautifulSoup解析内容,发现新标题并打印。关键步骤包括网络请求、HTML解析和内容比较。
部署运行你感兴趣的模型镜像

任务概述

这次的任务是定时的爬取知乎热榜前十的标题,如果当前爬取的热榜较上一次有所变动,则将新增的标题打印出来。

一、网页的爬取和解析

爬取网页可以选择用urllib库,也可以选择使用request库,这里选用request。

爬取热榜网页后获得页面的html内容,随后要做的就是解析些内容,获取热点标题和链接,这里用bs4中的BeautifulSoup进行解析。

import time
import requests
from bs4 import BeautifulSoup

# 设置headers,复制headers的时候注意不要搞错了
url = 'https://www.zhihu.com/hot'
headers = {
'cookie':'...',		# 填入你的cookie
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.3',
}

# python的接口很方便,这么几行就能完成热榜标题的提取
def getHot()->list:
    try:
        # 简单直接的方法获取页面内容
        res = requests.get(url,headers=headers)
        html = res.text
        
        # 处理网页内容,提取热榜标题和链接
        soup = BeautifulSoup(html, 'lxml')
        hot_list = soup.select('#TopstoryContent > div > div > div.HotList-list > section > div.HotItem-content > a')
        hot_list = [hot['title'] + "\n" + hot['href'] +'\n' for hot in hot_list]
        return hot_list[0:10]
    
    # 如果断网了,则上面这段代码会抛出异常,需进行处理
    except:
        print("[",cur_time(),"]:当前网络不可用,60s后将再次尝试连接网络\n")
        time.sleep(60)
        return []

二、定时更新

获取热榜标题后任务就已经完成大半了,剩下的就是定时的爬取热榜并将更新的内容打印出来。

# 检查,每隔一段时间检查一次热榜,将新增的标题打印出来
def checkUpdate():
    # 每10分钟检查一次更新
    print("\n*********************知乎热榜*********************\n")
    hot_list_old = []
    while hot_list_old == []:
        hot_list_old = getHot()
    print("当前热榜前十\t [time:" + cur_time() +']\n')
    for hot in hot_list_old:
        print(hot)
    print("\n\n********************每分钟刷新一次********************\n")
    while(1):
        time.sleep(60)
        hot_list_new = getHot()
        flag = 0
        while(hot_list_new == []):
            flag = 1
            hot_list_new = getHot()
        if flag == 1:
            print("[",cur_time(),"]:网络连接已恢复")
        # 对比两次热榜是否相同,将新榜中新增的标题提取出来
        for hot_new in hot_list_new:
            flag = 0    # 更新标记
            for hot_old in hot_list_old:
                if hot_new == hot_old:
                    flag = 1
            if flag == 0:
                print(cur_time(),"\t",hot_new)
        hot_list_old = hot_list_new
# 获取当前时间
def cur_time():
    return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 

这里其实并不复杂,只是为了打印的效果更好看一些,添加较多的print语句。

三、生成可执行文件

最后的话将这份代码打包成可执行文件,需要用到pyinstaller库。

在终端中进入到代码文件所在目录,然后执行pyinstaller -F XXX.py,等待十来秒后在当前目录下生成disk文件夹,里面的文件即为可执行文件。

在这里插入图片描述

双击可执行文件,效果如下:在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且爱钻研,自行调试。 基于selenium对榜进行爬虫并可视化python源码+项目说明+数据集.zip ## 1.Requirements: 打开文件夹, 在地址栏输入 %comspec% 并按回车 ![image-20200613122022518](https://user-images.githubusercontent.com/60550888/84560905-9bd0f700-ad7a-11ea-97df-b1fdab857edc.png) 这样可以在当前目录下打开cmd ![image-20200613122113348](https://user-images.githubusercontent.com/60550888/84560912-b99e5c00-ad7a-11ea-81a1-ceb35c124324.png) 命令行输入`pip install -r requirements.txt` 并回车,安装所需要的库 ![image-20200613123008622](https://user-images.githubusercontent.com/60550888/84560929-ed798180-ad7a-11ea-89c5-ab60efcf118f.png) 之后打开 **zhihu_crawler.py**, 将webdriver设置成自己的绝对地址,并保存 ![image-20200613123234436](https://user-images.githubusercontent.com/60550888/84560942-113cc780-ad7b-11ea-9b67-11e76e6f3331.png) 然后打开**selenium_login.py**, 进行同样的操作,并输入你的乎的账号和密码,并保存 ![image-20200613123427592](https://user-images.githubusercontent.com/60550888/84560954-26b1f180-ad7b-11ea-9f7c-5d1afffe7890.png) 最后打开 **main.py** , 进行同样的操作,并保存 ......
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值