【Python】利用python来获取高中官网最新新闻

谨以此文,怀念那再也回不去的高中。

1.程序准备

半夜写python小程序的时候,突然怀念起高中的生活。于是我打开高中学校官网:合肥八中官网
八中官网

我们点击“进入主页”,然后下拉,点击高三年级新闻版块右上角的more
more
进入了这个界面:高三年级新闻
在这里插入图片描述
如图,我们需要爬取的是红框圈出来的标题
首先,我们需要了解网页的代码结构:
我们可以通过按F12,大致查看一下网页的代码如下图。
目标代码

2.开始写程序

接着我们需要找到我们需要找到的文字在何处位置,找到后再通过寻找能够正好选中该位置的div盒子来定位,按照这样的步骤分析网页代码。

分析好了网页代码,那么我们开始写程序:

1.引入库

首先引入我们需要的库:requestsbeautifulsoup4os(前两个库如果没有的话需要下载,os库是内置库无需下载,下载方式可以去看Python使用pip安装库的四种方法以及一些异常的解决办法

import os
import bs4
import requests

2.对文件操作的一些准备

#指定文件的保存路径为D盘
os.chdir("D:\\")
#打开文件,编码方式记得用中文(很重要)
file=open("合肥八中高三年级最新100条新闻.txt",'w',encoding='utf-8')

3.代码主体

#因为我们想要获取前10页的信息,所以我们要循环十次
for i in range(1,11):
    #每一页设定地址,让程序可以自动翻页
    url='http://www.hfbz.com/index/detail-700030002?page={}'.format(str(i))
    #观察得知每一页网址的变动只是更改了url中page=后的内容,因此我们每次设定地址也只需更改这一处
    print("正在解析第{}页".format(i))
    #获取链接内容,以及指定编码格式
    r = requests.get(url)
    r.encoding='utf-8'
    #创建soup解析器
    soup=bs4.BeautifulSoup(r.text,'html.parser')
    #定位到包含所有标题的最小div中,缩小范围
    title=soup.find('div', {'class': 'list-content'})
    file.write("第{}页标题:\n".format(i))
    #num用来给每一页的标题标序号
    num=1
    #对该div中的所有标题进行遍历
    for a in title.find_all('div',{'class':'list-xx'}):
        file.write("{}.".format(num))   #标序号
        num=num+1
        tex=a.span.string
        file.write(tex)    #写标题
        file.write('\n')    #换行
    file.write("\n")    #每页结束的换行,为了更加清晰
file.write("合肥八中高三年级最新100条新闻如上所示\n网址:http://www.hfbz.com/index/detail-700030002?page=1")
#关闭文件
file.close()

3.最终结果

在这里插入图片描述
在这里插入图片描述
代码如下:

# -*- coding: utf-8 -*-

import requests
import os
import bs4

os.chdir("D:\\")    #指定文件的保存路径为D盘
#打开文件
file=open("合肥八中高三年级最新100条新闻.txt",'w',encoding='utf-8')
#循环10次,获取并写入最新10页的标题
for i in range(1,11):
    #设定地址
    url='http://www.hfbz.com/index/detail-700030002?page={}'.format(str(i))
    print("正在解析第{}页".format(i))
    r = requests.get(url)
    r.encoding='utf-8'
    #创建soup解析器
    soup=bs4.BeautifulSoup(r.text,'html.parser')
    #定位到包含所有标题的最小div中,缩小范围
    title=soup.find('div', {'class': 'list-content'})
    file.write("第{}页标题:\n".format(i))
    #num用来给每一页的标题标序号
    num=1
    #对该div中的所有标题进行循环
    for a in title.find_all('div',{'class':'list-xx'}):
        file.write("{}.".format(num))   #标序号
        num=num+1
        tex=a.span.string
        file.write(tex)    #写标题
        file.write('\n')    #换行
    file.write("\n")    #每页结束的换行,为了更加清晰
file.write("合肥八中高三年级最新100条新闻如上所示\n网址:http://www.hfbz.com/index/detail-700030002?page=1")
#关闭文件
file.close()
print("获取合肥八中高三年级最新100条新闻成功!")
print("也谨以此,怀念那再也回不去的高中")

4.最新版代码(八中网页居然重写了!)

八中网页居然重写了!所以上面的程序会运行出错,最新版的是下面这个。
目标页面:http://www.hfbz.com/detail-9101?page=1
点这里可以快速访问

# -*- coding: utf-8 -*-
import requests
import os
import bs4
os.chdir("D:\\")    #指定文件的保存路径为D盘
file=open("合肥八中最新100条新闻.txt",'w',encoding='utf-8')
#循环10次,获取并写入最新10页的标题
for i in range(1,11):
    #设定地址
    url='http://www.hfbz.com/detail-9101?page={}'.format(str(i))
    print("正在解析第{}页".format(i))
    r = requests.get(url)
    r.encoding='utf-8'
    #创建soup解析器
    soup=bs4.BeautifulSoup(r.text,'html.parser')
    #定位到包含所有标题的最小div中,缩小范围
    title=soup.find('ul', {'class': 'r-list'})
    file.write("第{}页标题:\n".format(i))
    num=1   #num用来给每一页的标题标序号
    #对该div中的所有标题进行循环
    for a in title.find_all('a'):
        file.write("{}.".format(num))   #标序号
        num=num+1
        tex=a.string
        file.write(tex)    #写标题
        file.write('\n')    #换行
    file.write("\n")    #每页结束的换行,为了更加清晰
file.write("合肥八中最新100条新闻如上所示\n网址:http://www.hfbz.com/detail-9101?page=1")
file.close()
print("获取合肥八中最新100条新闻成功!")
print("也谨以此,怀念那再也回不去的高中")
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值