爬取网页新闻

Reads: 979 Edit

1 问题描述

网页可以分为静态网页和动态网页,静态网页指无需经过服务器的编译,直接加载到客户浏览器上显示出来,静态网页一般不需要用户的交互。动态网页则一般需要服务器对数据进行处理后发送到网页中,动态网页往往需要用户的交互。

网页新闻一般属于静态网页,所以我们这里使用request模块爬取网页新闻,并用BeautifulSoup模块来解析网页内容。

爬取新浪网页新闻,网页内容如下所示:

r-97

##2 导入所需模块

其中,第一行#-*- coding:utf-8 -*-表示utf-8编码,一般网页内容包含中文时需要加此说明!

#-*- coding:utf-8 -*-
from urllib.request import Request,urlopen
from bs4 import BeautifulSoup
import importlib,sys
importlib.reload(sys)

3 定义该网页的网址

url = "https://finance.sina.com.cn/stock/zqgd/2022-04-16/doc-imcwipii4529812.shtml"

4 爬取解析网页

采用urlopen将网页所有内容读取出来,保存到html变量中。

# header是模拟浏览器的参数,解决反爬虫问题,如果要爬取的网站没有反爬虫,可以不加hear!
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.55'}
req = Request(url, headers=header)
html = urlopen(req).read().decode('utf-8')

5 解析保存的网页内容

soup = BeautifulSoup(html, 'lxml')

6 提取网页标题

这一步比较关键,如何确定需要提取内容在网页中的节点位置呢?

可以使用chrome等浏览器的"检查元素"功能。然后点击下图中红色区域图标!

r-98

之后鼠标移到需要提取信息的网页位置,浏览器会自动给出该内容的节点位置:h1.main-title

r-99

采用find()函数查找标签为“h1”,属性(class_)为“main-title”的网页内容。并用get_text()函数提取文本内容!

title = soup.find('h1',class_='main-title').get_text()
print(title)

央行全面降准,释放5300亿资金!降息还有空间?从预告到落地仅用2天,如何影响股债楼?看最全解读

7 提取新闻的内容

采用上面相同的方法,定位到新闻内容,获取该内容的节点位置:div#artibody.article。其中“#”是CSS中的id选择器。

再次用find()函数查找标签为“div”,属性(class_)为“article”,id为“artibody”的网页内容。并用get_text()函数提取文本内容,strip()函数去掉前后空格,replace("\n","")去掉换行,replace(" ","")去掉多余的空格!

content = soup.find('div',class_='article',id='artibody').get_text().strip().replace("\n","").replace(" ","")

print(content)

从“预告”到落地,降准来了。4月15日晚间,人民银行发布消息称,为支持实体经济发展,促进综合融资成本稳中有降,决定于2022年4月25日下调金融机构存..........

8 保存到文件

file=open(r".\news.txt",'w')
file.write(title+'\n'+content)
file.close()


获取案例数据和源代码,请关注微信公众号并回复:Python_dt29


Comments

Make a comment