在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
# @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
- find_all
- find
- css_selector
- attributes
赠人玫瑰
手留余香
我们曾如此渴望命运的波澜,到最后才发现:人生最曼妙的风景,竟是内心的淡定与从容……我们曾如此期盼外界的认可,到最后才知道:世界是自己的,与他人毫无关系!-杨绛先生
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】按钮。
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【关注我】。