层级遍历:获取所有的热门主题
乙醇 创建于 almost 7 years 之前
最后更新: less than a minute 之前
阅读数: 218
稍微复杂一点的例子
在v2ex主页的右侧一般有个最热主题区域,里面列出了当日的热门讨论话题。这一节里我们就尝试使用爬虫技术获取这些热门主题文本和链接。
注意:v2ex本身提供了接口去获取这些热门主题的详细信息,本节内容只是举例,并不是最佳实践
具体步骤
- 访问v2ex主页,获取html文本
- 分析html文本,找出待获取内容的特征
- 解析html代码,根据特征拿出目标内容
- 打印这些内容
分析html代码
热门内容部分的html代码如下所示
<span class="item_hot_topic_title">
<a href="/t/415664">冬天了,身上静电咋处理?</a>
</span>
可以看出我们要找到的是所有class=item_hot_topic_title的span下面的a元素
代码
新建名为v2ex_hosts.py
的文件,输入下面的内容
import requests
from bs4 import BeautifulSoup
url = 'https://www.v2ex.com/'
soup = BeautifulSoup(requests.get(url).text, 'html.parser')
for span in soup.find_all('span', class_='item_hot_topic_title'):
print(span.find('a').text, span.find('a')['href'])
运行
在命令行中输入
python v2ex_hosts.py
预期结果
如果一切正常,那么应该可以看到类似下面的结果,由于每天的热门主题不一样,所以内容是会变化的
小米感恩节不感恩 /t/415623
冬天了,身上静电咋处理? /t/415664
违反一下政治正确,骂一下 Google /t/415600
做了将近 6 年程序员,没能成为大牛,考虑再三,决定改行,大家说,做点什么好呢? /t/415701
结果还是被雷猴王给套路了 /t/415843
一直很好奇 Mac+安卓的组合是基于什么优势考虑的呢? /t/415645
听说比特币要分叉了? /t/415858
看到大学同学朋友圈发的北大成人通知书,心里不是滋味。 /t/415821
当码农 8 年了,要不要去读个研 /t/415854
新进一家公司遭遇的待遇~~ /t/415863
我们可以学到什么
for span in soup.find_all('span', class_='item_hot_topic_title')
: 遍历所有的class=item_hot_topic_title的span。注意是class_
,不是class
,因为class是python的关键字,所以后面要加个尾巴,防止冲突
阅读内容
BeautifulSoup