当前位置:   article > 正文

仅用30行Python代码就能获取实时新闻数据?_python爬取新闻自动更新

python爬取新闻自动更新

前言

在本文中,我们将使用Python中的Requests和BeautifulSoup库,以及Pandas库来构建一个简单的网络爬虫,用于从珠海市生态环境局网站获取新闻数据。我们将探讨如何通过浏览器开发者工具观察网页、分析网页结构,以及使用爬虫技术从中提取有用的信息。

观察网页

我们首先通过浏览器进入珠海市生态环境局网站,通过浏览器开发者工具观察页面结构,确定我们需要爬取的数据位置和网址。

image.png

我们通过观察发现,找到需要爬取的信息,我们点击更多内容,跳转到了另一个页面:

image.png

鼠标右键点击页面空白处,点击“检查”,点击“网络”(Network)后Ctrl+R刷新页面。在文档栏中找到对应本网页地址栏网址尾端(即index.html

image.png

在标头栏,我们找到我们的请求头,以便我们后续访问:

image.png

在预览栏,我们找到了数据源,以便我们后续爬取:

image.png

在响应框,我们找到了存储数据的元素,文本被装在了一个类名为wendangListCdiv标签下,日期被strong标签承装,网址为a标签的href属性,标题为a标签的文本:

image.png

点击不同页数,发现网页的地址发生改变,总页数为20,第一页为index.html,2~20页为index+_+页数.html

image.png

代码实现

导入第三方库

安装需要用到的库,在终端输入以下代码:

pythion
复制代码
pip install requests 
pip install beautifulsoup4
pip install pandas
  • 1
  • 2
  • 3
  • 4
  • 5

引入需要的第三方库:

python
复制代码
import requests
import pandas as pd
import os
from bs4 import BeautifulSoup
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

我们导入了 requests 用于发送网络请求,pandas 用于数据处理,os 用于文件操作,以及 BeautifulSoup 用于解析 HTML。

请求数据

python
复制代码
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.60'}

for i in range(1, 21):
    items = []
    
    if i == 1:
        url = 'http://ssthjj.zhuhai.gov.cn/hbxw/index.html'
    else: 
        url = f'http://ssthjj.zhuhai.gov.cn/hbxw/index_{i}.html' 
        
    r = requests.get(url=url, headers=headers) 
    text = r.text 
    soup = BeautifulSoup(text, 'html.parser') 
    all_titles = soup.find_all("div", attrs={"class": "wendangListC"})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • headers={...}:设置了请求头,模拟了一个浏览器的请求,防止网站拒绝访问,模拟浏览器行为。
  • for i in range(1,21):循环遍历了不同页面的新闻数据,从1到20,构建了不同页面的网址。第一页的网址和后续页的网址稍有不同。
  • r = requests.get(url=url, headers=headers) text = r.text:发送了一个GET请求,获取页面的HTML文本,requests.get 是用来获取网页内容的函数,headers 是前面设置的请求头,确保你的请求看起来像是来自一个浏览器。
  • soup = BeautifulSoup(text, 'html.parser'):使用BeautifulSoup解析HTML文本。
  • find_all 函数会找到所有包含 class="wendangListC"div 标签,这正是包含新闻信息的部分。

解析数据

在循环中,逐一处理每个新闻的标题、链接和日期信息:

python
复制代码
for title in all_titles: 
    all_links = title.find_all("a")
    all_days = title.find_all("strong")
    
    for link, day in zip(all_links, all_days): 
        href = link.get('href') 
        title1 = link.string 
        day1 = day.string 
       
        item = [title1, href, day1] 
        items.append(item)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

我们找到了每个标题的 a 标签和日期的 strong 标签,并使用 zip 函数确保它们是一一对应的。然后,你提取了链接、标题和日期信息,将它们放入 item 列表,最后将 item 添加到 items 列表中。

存储数据

利用 pandas 库,将得到的数据转换为DataFrame,并写入CSV文件:

python
复制代码
df=pd.DataFrame(items,columns=['标题','网址','日期'])
        if not os.path.exists('珠海生态环境部新闻.csv'):
            df.to_csv(r'珠海生态环境部新闻.csv', encoding='utf_8_sig', mode='a', sep=',', index=False)
        else:
            df.to_csv(r'珠海生态环境部新闻.csv', encoding='utf_8_sig', mode='a', header=False, sep=',', index=False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这段代码检查文件是否存在,如果存在则以追加的方式写入,否则以新建文件的方式写入。

全套代码及运行结果

  • 全套代码
python
复制代码
import requests
import pandas as pd
import os
from bs4 import BeautifulSoup

headers ={'User-Agent':'/'}

for i in range(1,21):
    items=[]
    if i==1:
        url='http://ssthjj.zhuhai.gov.cn/hbxw/index.html'
    else:
        url =f'http://ssthjj.zhuhai.gov.cn/hbxw/index_{i}.html'
    r = requests.get(url=url,headers=headers)
    text=r.text
    soup =BeautifulSoup(text,'html.parser')
    all_titles=soup.findAll("div",attrs={"class":"wendangListC"})
    for title in all_titles:
        all_links = title.find_all("a")
        all_days = title.find_all("strong")

        for link, day in zip(all_links, all_days):
            href = link.get('href')
            title1 = link.string
            day1 = day.string

            item = [title1, href, day1]
            items.append(item)
        df=pd.DataFrame(items,columns=['标题','网址','日期'])
        if not os.path.exists('珠海生态环境部新闻.csv'):
            df.to_csv(r'珠海生态环境部新闻.csv', encoding='utf_8_sig', mode='a', sep=',', index=False)
        else:
            df.to_csv(r'珠海生态环境部新闻.csv', encoding='utf_8_sig', mode='a', header=False, sep=',', index=False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 运行结果

image.png

结论

通过这个简单的爬虫项目,我们成功地从珠海市生态环境局网站获取了新闻数据,并将其存储为CSV文件。这个爬虫可以方便地用于定期获取最新的新闻信息,为后续数据分析和可视化提供了基础。

如果你对Python感兴趣的话,可以试试我整理的这份Python全套学习资料,微信扫描下方二维码免费领取

包括:Python永久使用安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等学习教程。带你从零基础系统性的学好Python!
在这里插入图片描述

零基础Python学习资源介绍

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python学习软件

工欲善其事,必先利其器。学习Python常用的开发软件都在这里了!
在这里插入图片描述

三、Python入门学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

四、Python练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

五、Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。这份资料也包含在内的哈~在这里插入图片描述

六、Python面试资料

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

七、资料领取

上述完整版Python全套学习资料已经上传CSDN官方,需要的小伙伴可自行微信扫描下方CSDN官方认证二维码输入“领取资料”免费领取!!
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/546657
推荐阅读
相关标签
  

闽ICP备14008679号