当前位置: 首页 > news >正文

python爬虫实战(1)--爬取新闻数据

想要每天看到新闻数据又不想占用太多时间去整理,萌生自己抓取新闻网站的想法。

1. 准备工作

使用python语言可以快速实现,调用BeautifulSoup包里面的方法
安装BeautifulSoup

pip install BeautifulSoup

完成以后引入项目

2. 开发

定义请求头,方便把请求包装成正常的用户请求,防止被拒绝

headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
}

定义被抓取的url,并请求加上请求头

    response = requests.get(url=url, headers=headers)

BeautifulSoup解析

    soup = BeautifulSoup(response.text, "html.parser")

分析网站需要提取数据的标签![在这里插入图片描述](https://img-blog.csdnimg.cn/b687fdc39a0d4f1999a5492b70fda4a5.png在这里插入图片描述
因为获取的对象是li标签的第一个,即

        divs = soup.find(class_="js-item item")

这样默认就是第一个,如果需要获取全部,则需要find_all,遍历集合
防止获取到的新闻是当天的做一个日期判断

        a = first_div.find(class_="title")if a.getText().__contains__(datetime.date.today().strftime("%#m月%#d日")):

日期存在title里面所以为了判断单独取一下信息
然后要取到最新日期的新闻自己的url,并get请求这个url
在这里插入图片描述

            b = a.get('href')response = requests.get(url=b, headers=headers)soup = BeautifulSoup(response.text, "html.parser")

打开新的网址后分析网站标签信息

在这里插入图片描述
取这个标签,获取到p标签的值

            body = soup.find(class_="post_body")p = body.find_all('p')

获取到的是个数组,去掉第一个元素,从第二个开始即是我们需要的结果

            p_id_tag = p[1].__str__()

输出的信息带有元素标记,使用正则处理一下

            raw_text = re.findall(r'<p[^>]*>(.*?)</p>', p_id_tag).__str__()# 去掉 HTML 标签并换行显示clean_text = raw_text.replace('<br/>', '\n').replace('<p>', '').replace('</p>', '').replace("']","").replace("['", "").replace(r"\u200b", "")

然后把抓取的信息写入txt

            file = open("C:\\Users\\Administrator\\Desktop\\每日新闻" + '.txt','w', encoding='utf-8')file.write(clean_text)file.close()

最后使用定时任务每天定时抓取,这样就可以每天更新了

    schedule.every().day.at("08:00").do(getNews)while True:schedule.run_pending()time.sleep(1)

运行效果
在这里插入图片描述

http://www.lryc.cn/news/116396.html

相关文章:

  • React Hooks 详细使用介绍
  • python版《羊了个羊》游戏开发第一天
  • 【uniapp】原生子窗体subNvue的使用与踩坑
  • 浅析 C 语言的共用体、枚举和位域
  • TartanVO: A Generalizable Learning-based VO 论文阅读
  • 单例模式-java实现
  • 篇八:装饰器模式:动态增加功能
  • 算法通关村第五关——n数之和问题解析
  • 小白到运维工程师自学之路 第七十集 (Kubernetes集群部署)
  • docker 部署mysql 5.6集群
  • mysql基本信息查询
  • C语言初学者必读:使用for循环将数字从大到小排序并输出
  • 【Vue+Element-plus】记录后台首页多echart图静态页面
  • BM5 合并k个已排序的链表 javascript
  • 1.利用matlab建立符号表达式(matlab程序)
  • LVS工作环境配置
  • 金蝶,「起舞」在大模型时代
  • 解决Vs Code工具开发时 保存React文件时出现乱码情况
  • Fastjson 使用指南
  • 阿里云内容审核服务使用(图片审核)
  • git撤回最近一次push操作
  • 2000-2022年上市公司环境不确定性(原始数据+测算代码+测算结果)
  • 网络基本概念
  • 2.安装Docker-ce
  • Redis-2
  • 一分钟了解下Java追随和适应云原生的手段之Java Native Build(JNB)
  • Flutter iOS 与 flutter 相互通信
  • OpenCV和PIL图像对象转换
  • IDEA的实用快捷键大全
  • 04-6_Qt 5.9 C++开发指南_QListWidget和QToolButton