tags
Python
type
Post
status
Published
slug
learning-python-web-crawler
date
Mar 24, 2021
summary
一个简单的python爬虫示例
category
软件工具
icon
password

前言

某产品经理提出以下三个需求开发一个程序:
1. 每天自动从网上找到新闻
2. 自动整理新闻排版成一张图片
python有强大的网络爬虫能力,实现这样的功能还是很快的

准备工作

  • 确定新闻信息源
找一个提供新闻的网站,这里我用的是 https://www.pmtown.com/archives/category/早报  这个网站,每天会更新一篇新闻。
  • python安装依赖库
pip install requests pip install bs4
💡
requests : 用来访问请求网站 bs4 : 用来从网站标签中提取数据
  • 安装效果图
notion image
notion image

代码实现

用request库抓取网页上的文本信息

在easy.txt中写入这几行代码:
import requests from bs4 import BeautifulSoup obj1 = requests.get('http://www.pmtown.com/archives/category/早报') print(obj1.text)
💡
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
执行效果
notion image

分析页面元素中所需的内容

对着最新的一条新闻,右键点击检查,浏览器中会弹出相应的标签文本;
notion image
分析一下这部分网页的代码
1. 列表里是所有的新闻地址,按时间倒序排列,最新的在最上面;每天会有一条新的早报地址;
2. 他是一个 <a></a> 标签包裹的
3. 这个a标签中有一个class="list-title text-lg h-2x"
4. 路径在这段代码的href=""中 可以看到这条新闻的地址是 https://www.pmtown.com/archives/293994.html
<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) 找到了就打印出来看看
执行效果:
notion image
 
上一步,我们获取到了每天最新的新闻地址。接下来我们打开上面的地址详情页分析一下。
 
notion image
右键检查,分析网页代码规律:不难发现,这个代码的特点是:
1. 新闻信息和日期在<h1></h1>中包裹着
2. 新闻内容在<p></p>中包裹着
<div class="post-content"> <h1>泡面早班车#2021年5月12日 星期三</h1> <p>【泡面头条】<br> 1、滴滴出行旗下共享。。。<br> 滴滴旗下共享。。。<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) 找到了就打出来看看
这段代码执行效果:将新闻信息提取出来,并打印在屏幕上。
notion image
 

总结

这里我们用到了python的request库以及BeautifulSoup库实现了网页信息的获取与查找。核心代码行数不超过20行。同样的方式我们还可以做更多事,例如获取天气、查询股票价格等等需要信息获取的需求。
Python入门(一)—— 安装环境短视频自媒体之路

  • Waline
  • Valine
  • Giscus
  • Cusdis