Python爬取中国网新闻

一、制作新闻的Excel索引

  • 观察网页

  • 导入相关库

  • 请求数据

  • 解析数据

  • 保存excel文件

二、将新闻正文内容保存为word

  • 观察网页

  • 导入相关库

  • 对子网页的内容进行爬取并保存成word:以一个子网页为例

  • 1、请求数据

  • 2、解析数据并存储word

  • 循环爬取多个子网页的内容并保存成word

三、全套代码及运行结果

一、制作新闻的Excel索引

观察网页

首先进入网页:http://news.china.com.cn/node_7247300.htm,再通过翻页,对比第1页,第2页以及最后1页的网址,发现它们之间存在着差别,则此网页为静态网页。

根据对比,除了第一页网址不同外,其他页面下的网址为http://news.china.com.cn/node_7247300_{i}.htm,i为其页码,在之后的爬取中,可用for循环和if-else来对不同的页面数据进行爬取。

导入相关库

引入所需的第三方库,代码如下:

import requests   import pandas as pd   from bs4 import Beautifulsoup   

请求数据

对于静态网页,我们可用Requests库请求数据。先点击“网页”后刷新网页找到所需的第一个链接“node_7247300.htm”,再点击“标头”可知,网页的请求方式为“GET”。

运行代码,显示Requests[200],即请求成功,则无需伪装请求头。但为防止乱码,我们使用r.encoding=r.apparent_encoding。过程如下:

import requests   from bs4 import BeautifulSoup   import pandas as pd   items = []   url='http://news.china.com.cn/node_7247300.htm'   r=requests.get(url)   r.encoding=r.apparent_encoding   print(r)   

解析数据

检查页面,发现所有新闻都储存在‘div’标签下的class_="layout_news"中,每行新闻在上述标签的‘div’,class_="plist1_p"标签下,且在此标签‘h2’下不同新闻的子链接位于’a’标签的’href’中,新闻标题位于’h2’标签中,对应新闻发布时间位于’div’,class_="time"标签中。因此,可以采用BeautifulSoup库解析数据。

由前面的分析,知除首页外,通用网址为http://news.china.com.cn/node_7247300_{i}.htm。因为本文在此处爬取了首页,所以需加上if-else语句。同时,在查找div元素之前,先使用一个for循环。最后,添加了一个append语句,不断将item添加至items。具体代码如下:

items=[] #定义一个空列表,存储信息   for i in range (1,4):       if i==1:           url='http://news.china.com.cn/node_7247300.htm'       else:           url=f'http://news.china.com.cn/node_7247300_{i}.htm'             r=requests.get(url)       r.encoding=r.apparent_encoding       soup=BeautifulSoup (r.text,'html.parser')       div=soup.find('div',class_="layout_news").find('div',class_="plist1").find('div',class_="plist1_p")       div_list=soup.find('div',class_="layout_news").find_all('div',class_="plist1")       for div in div_list:           title=div.find('h2').text           date=div.find('div',class_="time").text           href=div.find('h2').find('a').get('href')           item=[title,href,date]           items.append(item)   

保存excel文件

使用pd.DataFrame方法将嵌套列表items转变为数据框。

df=pd.DataFrame(items,columns=['标题','网页链接','发布时间'])   df   

采用pandas库保存成excel文件具体代码如下:

df.to_excel(r'D:\中国网新闻索引.xlsx')   

二、将新闻正文内容保存为word

观察网页

由于该网站有两种链接形式,无法用一套代码循环爬取所有的子链接新闻。故此处取其中一网页地址占多数的,以".shtml"结尾的网站运用if-else语句进行判断:若网页以".shtml"结尾,则爬取网页正文内容;否则跳过。

if  href.endswith(".shtml"):       爬取正文内容   else:       pass   

通过在网页空白处右击鼠标,选择检查,按下ctrl+f,来对网页下的一些内容进行查找,若能在检查框中找到相同的文字内容,则说明该网站为静态网站,反之则为动态网站。我们在搜索框中输入“本届”,发现可以找到相同内容,则该网站为静态网站。

导入相关库

import requests   import docx   from docx import Document   

对子网页的内容进行爬取并保存成word:以一个子网页为例

请求数据

任意选取一个以".shtml"结尾的网站,先点击“网络”后刷新网页找到所需的第一个链接,再点击“标头”可知,网页的请求方式为“GET”。

运行代码,显示Requests[200],即请求成功,则无需伪装请求头。为防止乱码,我们使用r.encoding=r.apparent_encoding。过程如下:

import requests   href='http://news.china.com.cn/2023-12/10/content_116869341.shtml' # 子链接网址   r=requests.get(url=url)   r.encoding=r.apparent_encoding   

解析数据并存储word

对页面的文本位置进行观察,发现新闻标题位于’div’,class_="content"的"h1"中。正文位于’div’,class_="article"下的’p’标签中。因此可用BeautifulSoup库解析数据,并利用for循环将段落爬取到Word。

doc = Document()   soup=BeautifulSoup(r.text,'html.parser')   if  href.endswith(".shtml"):       title=soup.find('div',class_="content").find('h1').text       p_list=soup.find('div',class_="article").find_all('p')       doc.add_heading(title)     # 将文本内容爬到Word中       for p in p_list:           para=p.text           doc.add_paragraph(para)   else:       pass   doc.save(r'D:\中国网一个新闻要闻.docx') # 储存数据   

循环爬取多个子网页的内容并保存成word

具体代码如下:

from docx import Document   doc = Document()   for i in range(len(df)):       title=df.iloc[i]['标题']       date=df.iloc[i]['发布时间']       href=df.iloc[i]['网页链接']       print(href)       r=requests.get(url=href,verify=False)       r.encoding=r.apparent_encoding       soup=BeautifulSoup(r.text,'html.parser')       if  href.endswith(".shtml"):           title=soup.find('div',class_="content").find('h1').text           p_list=soup.find('div',class_="article").find_all('p')           doc.add_heading(title)         # 将文本内容爬到Word中           for p in p_list:               para=p.text               doc.add_paragraph(para)       else:           pass    doc.save(r'D:\中国网要闻.docx') # 储存数据   

三、全套代码及运行结果

全套代码如下:

import pandas as pd   import requests   from bs4 import BeautifulSoup   items=[] #定义一个空列表,存储信息   for i in range (1,4):       if i==1:           url='http://news.china.com.cn/node_7247300.htm'       else:           url=f'http://news.china.com.cn/node_7247300_{i}.htm'       r=requests.get(url) #请求网页信息       r.encoding=r.apparent_encoding #防止乱码       soup=BeautifulSoup (r.text,'html.parser') # 解析数据       div=soup.find('div',class_="layout_news").find('div',class_="plist1").find('div',class_="plist1_p")       div_list=soup.find('div',class_="layout_news").find_all('div',class_="plist1")       # 爬取每一个网页中新闻的子链接信息       for div in div_list:           title=div.find('h2').text           date=div.find('div',class_="time").text           href=div.find('h2').find('a').get('href')           item=[title,href,date]           items.append(item)   df=pd.DataFrame(items,columns=['标题','网页链接','发布时间'])   df.to_excel(r'D:\中国网新闻索引.xlsx')  # 储存excel索引   from docx import Document   doc = Document()   for i in range(len(df)):       title=df.iloc[i]['标题']       date=df.iloc[i]['发布时间']       href=df.iloc[i]['网页链接']       print(href)       r=requests.get(url=href,verify=False)       r.encoding=r.apparent_encoding       soup=BeautifulSoup(r.text,'html.parser')       if  href.endswith(".shtml"):           title=soup.find('div',class_="content").find('h1').text           p_list=soup.find('div',class_="article").find_all('p')           doc.add_heading(title)           # 将文本内容爬到Word中           for p in p_list:               para=p.text               doc.add_paragraph(para)       else:           pass   doc.save(r'D:\中国网要闻.docx') # 储存word   

以上就是“Python爬取中国网新闻”的全部内容,希望对你有所帮助。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

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

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

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想了解如何用 Python 爬取历史天气数据,是吗? 首先,需要确定您想要爬取哪个地区的历史天气数据。一般来说,可以通过查询该地区的气象局或气象站获取历史天气数据。 接着,可以使用 Python 中的 requests 库来发送 HTTP 请求,获取页源代码。然后,可以使用 BeautifulSoup 库来解析页源代码,提取出所需的天气数据。 以下是一个简单的示例代码,用于爬取中国天气上北京市 2019 年 1 月份的历史天气数据: ``` python import requests from bs4 import BeautifulSoup url = 'http://www.weather.com.cn/weather/101010100.shtml#dt' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} r = requests.get(url, headers=headers) r.encoding = 'utf-8' soup = BeautifulSoup(r.text, 'html.parser') weather_list = soup.select('.t li') for weather in weather_list: date = weather.select('.time')[0].text weather_detail = weather.select('.temp')[0].text.strip() print(date, weather_detail) ``` 以上代码中,我们首先通过 requests 库发送了一个 GET 请求,获取了北京市天气页源代码。然后,使用 BeautifulSoup 库解析页源代码,提取出了 2019 年 1 月份的天气数据,并打印输出了日期和天气详情。 需要注意的是,不同的页结构不同,需要根据具体情况修改代码。同时,需要注意站的 robots.txt 文件,不要过度访问站,以免被封 IP 或其他限制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值