这是一片系列文章,最好先看看上一篇
从零开始开发Python程序(三)—— 用文本编辑器来写代码
目录
一、需求说明
关注时事新闻,是发财的第一步。某产品经理提出以下三个需求开发一个程序:
1. 每天自动从网上找到新闻
2. 自动整理新闻排版成一张图片
我想,这不就是我们群里辉哥每天的工作吗,辉哥太辛苦了,我要写一个这样的程序为他减轻负担~!
二、程序设计
功能示意图如下;直接开始需求的第一个步骤,从网站上采集新闻信息
三、从指定网站获取新闻
1.找一个提供新闻的网站
这里用的是 https://www.pmtown.com/archives/category/早报 (随便找的、不是广告引流)
网页是用Html标签写的,我们首先要用代码访问这个新闻网站,获取每天最新早报的网址;
2. 库的安装
这里我们将用到两个库:
requests :用来访问请求网站
bs4 : 用来从网站标签中提取数据
先后执行以下代码安装库,速度飞快~
pip install requests
pip install bs4
安装效果
3. 访问网站,获取页面数据
在easy.txt中写入这几行代码:
import requests
from bs4 import BeautifulSoup
obj1 = requests.get('http://www.pmtown.com/archives/category/早报')
print(obj1.text)
总共就5行代码,我稍微解释一下:
- import requests ;将requests库引入
- from bs4 import BeautifulSoup ; 从 bs4 这个库中只引入BeatifulSoup这个对象
- obj1 = requests.get('http://www.pmtown.com/archives/category/早报'); 用requests库的get方法请求网页,obj1是个临时变量
- print(obj1.text) ; 打印请求到的网页内容
保存文本,并执行代码;
python easy.txt
成功的话,会像我一样,控制台上打印出一堆html标签。恭喜你!已经掌握了如何用python程序获取网页数据啦,接下来就是为所欲为的时刻。
4. 查找最新新闻的链接
对着最新的一条新闻,右键点击检查,浏览器中会弹出这个链接的代码;可以看到这条新闻的地址是 https://www.pmtown.com/archives/293994.html;
分析一下这部分网页的代码
1. 列表里是所有的新闻地址,按时间倒序排列,最新的在最上面;每天会有一条新的早报地址;
2. 他是一个 <a></a> 标签包裹的
3. 这个a标签中有一个class="list-title text-lg h-2x"
4. 路径在这段代码的href=""中
<a
href="https://www.pmtown.com/archives/293994.html"
target="_blank" title="泡面早报|360将推出10万元左右的智能汽车、微信上线购物号功能主打人人都能带货、腾讯推出免费看片神器片多多还能边看边赚钱"
class="list-title text-lg h-2x"
one-link-mark="yes">
泡面早报|360将推出10万元左右的智能汽车、微信上线购物号功能主打人人都能带货、腾讯推出免费看片神器片多多还能边看边赚钱
</a>
我们可以用这段代码访问这个网站,并查找到当天最新一条新闻的网址;
html_obj = BeautifulSoup(obj1.text)
url = html_obj.find('a',class_='list-title text-lg h-2x').get('href')
print(url)
代码简单得只有三行,但我还是解释一下
- html_obj = BeautifulSoup(obj1.text) 用BeautifuSoup包装网页文本,便于解析查找数据的功能
- url = html_obj.find('a',class_='list-title text-lg h-2x').get('href') 查找指定a标签,该a标签中有一个class值为'list-title text-lg h-2x',找到后,获取该a标签中的href字段
- print(url) 找到了就打印出来看看
执行效果:你成功了吗,恭喜你,学会了如何从网站中抓取你想要的数据。
5. 抓取网页中的新闻文字
打开上一步的新闻网址 ,右键检查,分析网页代码规律:
不难发现,这个代码的特点:
1. <h1></h1>中包裹着日期
2. <p></p>中包裹着新闻内容
<div class="post-content">
<h1>泡面早班车#2021年5月12日 星期三</h1>
<p>【泡面头条】<br>
1、滴滴出行旗下共享单车品牌青桔发布名为青桔X的概念车<br>
滴滴旗下共享单车品牌青桔发布两轮概念电单车——青桔X。这款车采用了半封闭式的造型,前后灯使用到贯穿式大灯。在安全方面,它配备了汽车级毫米波雷达,可实现ADAS碰撞预警。同时,它支持开机健康自检,支持人脸、指纹识别、APP端健康提醒。它将搭载长续航高密度锂电池,支持无线快充。在智能互联方面,包括语音交互、车载导航等。据了解,滴滴方面希望,在5年后实现青桔X上路行驶。<br>
....省略
</p>
</div>
直接上代码:
obj2 = requests.get(url)
news_html = BeautifulSoup(obj2.text,)
news_content = news_html.find('p')
print(news_content)
代码只有四行,很简短,我解释一下:
- obj2 = requests.get(url) url是上一步获取的最新新闻的网址
- news_html = BeautifulSoup(obj2.text,) 用BeautifulSoup对象包装一下请求到的网站文本
- news_content = news_html.find('p') 查找<p>标签
- print(news_content) 找到了就打出来看看
执行效果:你成功了吗?
总共25行代码就搞定了这个功能,接下会教你如何将早报排班成图片 从零开始开发Python程序(五)—— 把文字排版成一张图片