Python爬虫——爬取某网站新闻

news/2024/12/22 18:12:50/

文章目录

  • 前言
  • 一、基本目标
  • 二、使用步骤
    • 整体代码
  • 结果
  • 总结


前言

🙉随机找了个网站爬爬,我们的目标是
1.利用爬虫的re、xpath等知识,爬取到这个官网上的新闻,内容有:新闻标题, 发布时间, 新闻链接, 阅读次数, 新闻来源五个属性。
2.把我们爬到的数据放到一个csv的文件中!
那么我们下面开始!🌝


提示:爬虫不可用作违法活动,爬取时要设定休眠时间,不可过度爬取,造成服务器宕机,需付法律责任!!!

一、基本目标

🌎我们的目标是爬取这个https://www.cqwu.edu.cn/channel_23133_0310.html网址的新闻数据

在这里插入图片描述

二、使用步骤

整体代码

import re
import time
import requests
from lxml import etree
import csv# 带爬网址
base_url = "https://www.cqwu.edu.cn/channel_23133_0310.html"
# 反反爬
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36","Accept-Encoding": "gzip, deflate, br","Accept-Language": "zh-CN,zh;q=0.9"
}# 爬取信息
resp = requests.get(url=base_url,headers=headers)
# 把信息通过etree进行赋值
html = etree.HTML(resp.text)
# xpath定位新闻列表信息
news_list = html.xpath("/html/body/div/div[3]/div/div/div[2]/div/ul/li")
data_list = []
# 对新闻列表循环遍历
for news in news_list:# 获取新闻链接news_url = news.xpath("./a/@href")[0]# 继续爬取新闻的详情页news_resp = requests.get(url=news_url)# 把详情页html信息赋值news_html = etree.HTML(news_resp.text)# xpath定位新闻详情页的标题news_title = news_html.xpath("/html/body/div/div[3]/div[1]/div/div[2]/div/div/h4/text()")[0]# re正则获取日期和引用来源time_refer_obj = re.compile(r'<div class="news-date">.*?发布时间:(?P<time>.*?)浏览:.*?次 来源:(?P<refer>.*?)</div>', re.S)result = time_refer_obj.finditer(news_resp.text)for it in result:# 对日期和引用进行赋值news_time = it.group("time")news_refer = it.group("refer").strip()# re正则获取浏览量数据count_obj = re.compile(r"浏览:<Script Language='Javascript' src='(?P<count_url>.*?)'>", re.S)result = count_obj.finditer(news_resp.text)for it in result:count_url = "https://www.cqwu.edu.cn" + it.group("count_url")count_resp = requests.get(url=count_url)news_read = count_resp.text.split("'")[1].split("'")[0]# 创建一个字典,把各项爬取的信息赋值到字典当中data = {}data['新闻标题'] = news_titledata['发布时间'] = news_timedata['新闻链接'] = news_urldata['阅读次数'] = news_readdata['新闻来源'] = news_refer# 字典添加到列表中,后续变成xml使用data_list.append(data)# 休眠一秒time.sleep(1)print(data)#  1.创建文件对象,encoding='utf-8'是设置编码格式,newline=''为了防止空行
f = open('news.csv', 'w', encoding='utf-8',newline='')
#  2.基于文件对象构建csv写入对象
csv_write = csv.writer(f)
#  3.构建列表头
csv_write.writerow(['新闻标题', '发布时间', '新闻链接', '阅读次数', '新闻来源'])
for data in data_list:#  4.写入csv文件csv_write.writerow([data['新闻标题'], data['发布时间'], data['新闻链接'], data['阅读次数'], data['新闻来源']])
print("爬取结束!")

结果

🌗下面是我们程序运行的输出过程

🌖这个是程序把数据存储到csv文件的文档
在这里插入图片描述

总结

爬虫的基本步骤:
1.检查有没有反爬,设置常规反反爬,User-Agentreferer都是最常见的反爬手段
2.利用xpathre技术进行定位,定位后获取想到的数据即可
3.利用csv库把数据写入到csv文件中


http://www.ppmy.cn/news/973766.html

相关文章

Python - 通过requests实现腾讯新闻抓取爬虫

最近也是学习了一些爬虫方面的知识。以我自己的理解&#xff0c;通常我们用浏览器查看网页时&#xff0c;是通过浏览器向服务器发送请求&#xff0c;然后服务器响应以后返回一些代码数据&#xff0c;再经过浏览器解析后呈现出来。而爬虫则是通过程序向服务器发送请求&#xff0…

Python爬虫爬取新浪新闻内容

首先感谢丘祐玮老师在网易云课堂的Python网络爬虫实战课程,接下来也都是根据课程内容而写.一来算是自己的学习笔记&#xff0c;二来分享给大家参考之用。 课程视频大概是在16年11月录制的&#xff0c;现在是18年2月.其中有几处因网站更新升级产生的不同,小小修改后仍是爬虫学习…

SQL RIGHT JOIN 关键字

在 SQL 中&#xff0c;RIGHT JOIN 是一种用于将两个或多个表中的记录组合在一起的 JOIN 操作类型。RIGHT JOIN 操作将返回右侧表中所有的行&#xff0c;并通过连接条件从左侧表中匹配相应的行。如果左侧表中没有匹配的行&#xff0c;则会在结果集中填充 NULL 值。因此&#xff…

程序员面试系列,MySQL常见面试题?

原文链接 一、索引相关的面试题 &#xff08;1&#xff09;索引失效的情况有哪些 在MySQL查询时&#xff0c;以下情况可能会导致索引失效&#xff0c;无法使用索引进行高效的查询&#xff1a; 数据类型不匹配&#xff1a;如果查询条件中的数据类型与索引列的数据类型不匹配&…

微服务——Nacos配置管理

目录 Nacos配置管理——实现配置管理 配置管理实践 Nacos配置管理——微服务配置拉取 Nacos配置管理——配置热更新 方式一: ​编辑 方式二(推荐方式): Nacos配置管理——多环境配置共享 优先级问题 Nacos配置管理——nacos集群搭建 总结​编辑 Nacos配置管理——实现配置管…

EasyUI Datagrid 应用

两种为 datagrid 赋值表格 number 1 <div class"easyui-layout" data-options"fit:true"><div data-options"region:center"><table id"storeTable" class"easyui-datagrid" style"width:100%;height:…

【PHP面试题79】在Linux中如何设置MySQL和PHP服务开机启动

文章目录 &#x1f680;一、前言&#x1f680;二、设置MySQL服务开机启动&#x1f50e;2.1 打开终端&#x1f50e;2.2 编辑MySQL配置文件&#x1f50e;2.3 修改配置文件&#x1f50e;2.4 检查MySQL服务是否已启动&#x1f50e;2.5 设置MySQL服务开机启动 &#x1f680;三、设置…

特斯拉机器人的未来?

ChatGPT等更高级技术&#xff1a;语言&#xff1b; 特斯拉&#xff1a;视觉导航&#xff1b; 波士顿&#xff1a;机械动力&#xff1b; 联手合作以马斯克的Optimus为原型生产一套人形机器人&#xff0c; 该人形机器人可以遵从所有者的命令加载一些模块&#xff1a;阿尔法&#…