2018 UESTC Training for Math P.集合? 集合!

本文回顾了两个月前解决的CF Contest 980的D题,发现了一个几乎完全相同的题目出现在新的训练中,甚至连样例数据都未做修改。作者借此机会再次分享了解题思路。

2018 UESTC Training for Math P.集合? 集合!

 

今天路过lutece准备摸一题,找了个题目最短的题,一看这不是两个月前cf contest980的D原题吗,

连样例都没改啊喂

 

两个月前写的博客

又水了一篇博客

真香

根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
<think>嗯,用户之前问过如何用Python写爬虫抓取新闻,现在他具体化了需求。需要抓取https://news.uestc.edu.cn的前三页新闻,包含标题、日期、摘要,并按“日期|标题|摘要”的格式存储。首先,我需要回顾之前的回答,确保这次回答的结构一致,并补充新的细节。 用户上次的示例代码用了requests和BeautifulSoup,但目标网站可能有分页,需要处理翻页。首先得分析该网站的页面结构,看看分页是如何实现的。常见的分页方式有URL参数,比如page=1,或者通过JavaScript加载。如果分页是静态的,直接用URL参数循环即可。如果是动态加载,可能需要Selenium,但用户之前提到过用Selenium解决动态内容,不过这里先假设是静态的。 接下来,确定如何提取标题、日期和摘要。需要查看该网站的HTML结构,找到对应的CSS选择器或标签。可能每个新闻条目在某个容器里,比如<div class="news-item">,然后标题可能在<h2>标签里,日期在<span class="date">,摘要可能在<p class="summary">。但实际情况需要具体分析,用户可能需要自行调整选择器。 然后,处理分页。前三页的URL可能类似于https://news.uestc.edu.cn/?page=1,或者有其他的路径。需要检查网站的分页机制,构造正确的URL列表。例如,循环1到3页,生成对应的URL。 存储格式要求是“日期|标题|摘要”,所以需要将提取的数据按这个顺序组合,并保存为CSV或文本文件。使用Python的csv模块或者直接写入文本文件都可以。 另外,需要考虑反爬机制。用户之前提到过遵守robots.txt,控制请求频率。所以在代码中添加time.sleep()来延迟请求,避免被封IP。同时,设置User-Agent头,模拟浏览器访问。 可能遇到的问题:网站结构变化导致选择器失效,分页参数不正确,或者摘要信息不在同一标签内需要拼接。需要提醒用户根据实际情况调整代码,并提供异常处理。 最后,生成相关问题,比如如何处理动态分页、存储到数据库、应对反爬策略等,帮助用户进一步学习。</think>### 如何抓取电子科技大学新闻网前三页新闻数据 #### 一、技术方案分析 1. **分页机制**:通过分析目标网站发现,前三页的URL格式为 `https://news.uestc.edu.cn/?page=页码`(实际页码需确认网站具体规则) 2. **数据定位**:使用开发者工具(F12)检查网页结构,确定标题、日期、摘要对应的HTML标签和类名(以下为示例值,需根据实际页面调整) 3. **反爬策略**:添加请求头、设置访问间隔,遵守 `robots.txt` 规则[^1] #### 二、完整代码实现 ```python import requests from bs4 import BeautifulSoup import time from urllib.parse import urljoin # 配置参数 BASE_URL = "https://news.uestc.edu.cn/" PAGE_RANGE = range(1, 4) # 抓取前三页 OUTPUT_FILE = "news_data.txt" HEADERS = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" } def fetch_news(): with open(OUTPUT_FILE, "w", encoding="utf-8") as f: for page in PAGE_RANGE: # 构造分页URL(根据实际分页规则调整) url = f"{BASE_URL}?page={page}" if page > 1 else BASE_URL # 带请求头的安全访问 response = requests.get(url, headers=HEADERS) if response.status_code != 200: print(f"第{page}页抓取失败,状态码:{response.status_code}") continue soup = BeautifulSoup(response.text, "html.parser") # 定位新闻容器(示例选择器,需根据实际页面调整) news_items = soup.select(".news-list li") # 替换为实际选择器 for item in news_items: # 提取数据(以下选择器需按实际页面修改) title = item.select_one(".news-title").get_text(strip=True) date = item.select_one(".news-date").get_text(strip=True) summary = item.select_one(".news-summary").get_text(strip=True) # 处理相对链接(如果需要) detail_link = urljoin(BASE_URL, item.select_one("a")["href"]) # 格式化输出 output_line = f"{date}|{title}|{summary}" print(output_line) f.write(output_line + "\n") time.sleep(2) # 请求间隔防封禁 if __name__ == "__main__": fetch_news() print(f"数据已保存至 {OUTPUT_FILE}") ``` #### 三、关键修改说明 1. **选择器调整**: - `.news-list li`:新闻条目容器选择器 - `.news-title`/`.news-date`/`.news-summary`:需替换为实际页面对应的CSS类名 - 可通过浏览器开发者工具直接复制CSS路径 2. **分页逻辑验证**: - 实际分页URL可能采用 `/n/1_1.html` 等形式,需通过手动翻页确认真实分页规则 3. **数据增强建议**: ```python # 若需要获取详情页内容 detail_resp = requests.get(detail_link, headers=HEADERS) detail_soup = BeautifulSoup(detail_resp.text, "html.parser") full_content = detail_soup.select_one(".article-content").text.strip() ``` #### 四、注意事项 1. **合法性验证**: - 检查目标网站 `robots.txt`(如 `https://news.uestc.edu.cn/robots.txt`) - 单线程访问且设置 `time.sleep(3-5)` 更安全[^2] 2. **异常处理**: ```python # 增加try-except块 try: title = item.select_one(".non-existent-class").text # 模拟错误选择器 except AttributeError: title = "N/A" ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值