【原】【爬虫系列】简要获取V2EX的今日热议主题

在V2EX主页的右侧有个最热主题区域,里面列出了当日的热门讨论话题。使用爬虫技术获取这些热门主题文本和链接。

注意:v2ex本身提供了接口去获取这些热门主题的详细信息,本节内容只是举例,并不是最佳实践

具体步骤

  • 访问v2ex主页,获取html文本
  • 分析html文本,找出待获取内容的特征
  • 解析html代码,根据特征拿出目标内容
  • 打印这些内容

分析html代码

热门内容部分的html代码如下所示

<span class="item_hot_topic_title">
      <a href="/t/458403">后端工程师不会手写 sql,可以接受不?</a>
</span>

 

可以看出我们要找到的是所有class=item_hot_topic_title的span下面的a元素

代码

新建名为v2ex-hot.py的文件,输入下面的内容

复制代码
# coding:utf-8
#!/usr/bin/python

# @Time     :16-5-29 下午3:20
# @Author   :Hao Chuang
# @Site     :http://cnblogs.com/haochuang
# @Wechat   :nianhuaiju
# @File     :v2ex-hot.py
# @Software :PyCharm Community Edition

import requests
from bs4 import BeautifulSoup

url = 'https://www.v2ex.com/'
headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'}

def get_hot_url():
    soup = url_set(url)
    for topic in soup.find_all('span', class_="item_hot_topic_title"):
        print(topic.text)
    printstar(50)

def printstar(num):
    print '*' * num

def url_set(url_):
    soup = BeautifulSoup(requests.get(url_, headers=headers).text, 'html.parser')
    return soup

if __name__ == '__main__':
    printstar(100)
    get_hot_url()
复制代码

 

运行

在命令行中输入

python v2ex-hot.py

预期结果

如果一切正常,那么应该可以看到类似下面的结果,由于每天的热门主题不一样,所以内容是会变化的

复制代码
****************************************************************************************************
后端工程师不会手写 sql,可以接受不?
它可能是史上效率最高的 [应用启动器] !
有创业的想法,一定要先成立公司。
「新一线城市」到底是抢人大战还是卖房大战
萌新问个逗逼问题:
对于公司爱找事儿的同事该如何对待呢?
一周内三个百度贴吧账号被永封
各位床产生的灰尘都是怎么解决的?
你们睡觉的时候,腰会碰到床吗。。。我感觉要垫个东西,不然好难受啊
现在还有人用 GDB 么?
**************************************************
复制代码

 

几个要点

  • for span in soup.find_all('span', class_='item_hot_topic_title'): 遍历所有的class=item_hot_topic_title的span。注意是class_,不是class,因为class是python的关键字,所以后面要加个尾巴,防止冲突

  • span.find('a').text:层级遍历,先找到span,再从span下找到a,这是常用套路

  • span.find('a')['href']:获取href属性,在bs4里,我们可以通过[attribute_name]的方式来获取元素的属性

阅读内容

BeautifulSoup

 

posted @   念槐聚  阅读(318)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示