今天爬取的网站是每经网,一个以发布国内外经济相关类新闻为主的网站,信息来源可靠,是很多股民和期民都喜欢浏览的一个网站。
以下用python写的简单爬取新闻标题和内容的代码,思路过程是先从每经网的首页,找到当日新闻的所有网址,然后以for循环的方式遍历每一个单独新闻网址,将每一个网址内的新闻标题和内容打印出来,下面是具体的代码,感兴趣的可以试着去运行。
#导入模块
from bs4 import BeautifulSoup
import requests
import time
#使用requests模块获取网页源码
url="https://www.nbd.com.cn/columns/3/"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0" }
res = requests.get(url,headers=headers)
res.encoding="utf-8"
#使用BeautifulSoup获取当日新闻的所有网址
soup=BeautifulSoup(res.text,'lxml')
news_main= soup.find('ul',class_='u-news-list').find_all("a")
for i in news_main:
url_list = (i.get("href"))
#获取网页源码和解析操作,打印一篇新闻的标题和内容
res_1 = requests.get(url_list,headers=headers)
res_1.encoding="utf-8"
soup_1 = BeautifulSoup(res_1.text,'lxml')
title = soup_1.find('title')
print(title.get_text())
news_main_1= soup_1.find('div',class_='g-articl-text').find_all("p")
for j in news_main_1:
print(j.get_text())
#使用线段将每一篇新闻隔开,使用延迟函数,每下载一篇新闻停顿2.5秒
print("----------------------------------------------------------------------")
time.sleep(2.5)
这里添加量一个time模块,是python自带的,较为常用的就是延迟函数sleep()了,括号里面输入的数字代表延迟的秒数,每爬取一篇新闻就停顿2.5秒,以免被网站封禁IP。
下图是当日新闻的所有网址,赋值给了url_list
下面是输出界面,爬取成功的新闻
上面的新闻是8月26日,只属于第一网页,如果想爬更多网页,也可以通过构造for循环实现,感兴趣的可以去尝试。
值得注意的是,每经网虽然是传统的网站,反扒机制落后,但还是要控制爬取频率,严格遵守爬虫协议,以免占用服务器太多资源。
总结一下,这一节主要是展示如何一次性爬取多篇新闻的过程,灵活使用for循环,每次代码运行添加了延迟,代码简单但需要熟练运用两个基本的爬虫模块。
如果你看懂了上面的代码,可以尝试去其他新闻网站爬取来检验以下成果,最好是选比较传统的网站,基本没有反爬机制。
以上内容只作为教学展示使用,旨在演示python的运行逻辑和知识点。如果有任何侵权行为,联系后我会立即删除。