<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>数据分析 &#8211; mylogs.cn</title>
	<atom:link href="https://mylogs.cn/tag/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/feed/" rel="self" type="application/rss+xml" />
	<link>https://mylogs.cn</link>
	<description>发现、记录、分享</description>
	<lastBuildDate>Sat, 15 Aug 2026 10:52:24 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>AI 网页爬虫怎么写？Python 三步抓取结构化数据</title>
		<link>https://mylogs.cn/python-ai-web-scraper-tutorial/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 10:52:03 +0000</pubDate>
				<category><![CDATA[科技]]></category>
		<category><![CDATA[AI工具]]></category>
		<category><![CDATA[BeautifulSoup]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[教程]]></category>
		<category><![CDATA[数据分析]]></category>
		<category><![CDATA[数据抓取]]></category>
		<category><![CDATA[网页爬虫]]></category>
		<guid isPermaLink="false">https://mylogs.cn/python-ai-web-scraper-tutorial/</guid>

					<description><![CDATA[数据科学与人工智能项目里，拿到外部数据往往是第一步。传统做法是用 Python 的 requests 库把网页 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">数据科学与人工智能项目里，拿到外部数据往往是第一步。传统做法是用 Python 的 requests 库把网页抓回来，再用 BeautifulSoup 解析；如果想让爬虫更「聪明」，可以再接一个大模型，把杂乱的网页文本直接整理成结构化数据。技术媒体 KDnuggets 近期的一篇教程，演示了如何用 Python 搭建一个最小可用的 AI 网页爬虫。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a853cd4c1e4a&quot;}" data-wp-interactive="core/image" data-wp-key="6a853cd4c1e4a" class="wp-block-image size-large aligncenter wp-lightbox-container"><img fetchpriority="high" decoding="async" width="1200" height="821" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/4764ef3f0d157a383511100693aec57d_header.webp" alt="AI 网页爬虫怎么写？Python 三步抓取结构化数据" class="wp-image-4957" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/4764ef3f0d157a383511100693aec57d_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/4764ef3f0d157a383511100693aec57d_header-300x205.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/4764ef3f0d157a383511100693aec57d_header-1024x701.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/4764ef3f0d157a383511100693aec57d_header-768x525.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">AI生成配图</figcaption></figure>





<h2 class="wp-block-heading">第一步：用 requests 取回网页</h2>



<p class="wp-block-paragraph">开始前需要安装三个库：requests 负责网络请求，beautifulsoup4 负责解析，pandas 负责把结果存成表格。</p>



<p class="wp-block-paragraph">拿到目标网址后，第一步是用 requests.get() 发起请求，取回页面的原始 HTML。很多网站会拒绝没有标识的请求，因此在请求头里带上一个正常的 User-Agent 是基本操作。取回的文本，就是后续所有处理的基础。</p>



<h2 class="wp-block-heading">第二步：用 BeautifulSoup 解析内容</h2>



<p class="wp-block-paragraph">BeautifulSoup 能把手写的 HTML 变成可方便检索的对象。以一个简单的练习站点为例，页面上往往罗列着一组条目，每条包含正文、作者和若干标签。</p>



<p class="wp-block-paragraph">用 find() 与 find_all() 两个方法，就能按标签和类名把想要的内容逐条提取出来。比如先抓全部条目的容器，再在容器内部取出每一段的文本、作者名和标签。把多页内容循环抓完，最后用 pandas 汇总成一个 DataFrame 保存，一次就能拿到成百上千条数据。</p>



<h2 class="wp-block-heading">第三步：让大模型做智能提取</h2>



<p class="wp-block-paragraph">前面两步得到的是「原始文本」，要变成可用数据，传统做法是针对每个站点手写解析规则——网站结构一变，规则就失效。AI 网页爬虫的思路是：把清洗后的文本连同明确的指令一起交给大模型（LLM），让它输出固定字段的 JSON。</p>



<p class="wp-block-paragraph">具体实现上，可以调用任意兼容接口的大模型，把「请从下面文本中提取标题、作者、日期、摘要」这类指令和文本一并发送，要求模型返回结构化结果。这样一来，面对不同结构的页面，只要换指令，就不必重写解析代码。</p>



<h2 class="wp-block-heading">进阶：动态页面与反爬</h2>



<p class="wp-block-paragraph">如今的网页大量依赖 JavaScript 渲染，requests 直接取回的可能只是空壳。这类页面可以用 Playwright 等无头浏览器先把页面跑起来，再交给 BeautifulSoup 解析。遇到反爬严格的站点，则可以配合代理轮换来控制请求频率。</p>



<h2 class="wp-block-heading">三点提醒</h2>



<p class="wp-block-paragraph">抓取行为应当遵守目标站的 robots.txt 与服务条款，控制请求节奏，避免对服务器造成压力；只抓公开内容，不碰付费墙后或涉及个人隐私的数据；把爬虫用于学习与研究，而不是批量搬运他人成果。</p>



<p class="wp-block-paragraph">把三层组合起来——requests 负责抓、BeautifulSoup 负责解、大模型负责提——一个能用的 AI 网页爬虫就搭好了。对需要频繁收集外部数据的开发者来说，这是一项值得掌握的基础能力。</p>



<p class="has-small-font-size wp-block-paragraph">来源：KDnuggets</p>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Excel目标搜索：定好目标值，让表格反推缺口</title>
		<link>https://mylogs.cn/excel%e7%9b%ae%e6%a0%87%e6%90%9c%e7%b4%a2%ef%bc%9a%e5%ae%9a%e5%a5%bd%e7%9b%ae%e6%a0%87%e5%80%bc%ef%bc%8c%e8%ae%a9%e8%a1%a8%e6%a0%bc%e5%8f%8d%e6%8e%a8%e7%bc%ba%e5%8f%a3/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Tue, 11 Aug 2026 15:39:39 +0000</pubDate>
				<category><![CDATA[经验与技巧]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Microsoft Office]]></category>
		<category><![CDATA[办公技巧]]></category>
		<category><![CDATA[效率工具]]></category>
		<category><![CDATA[数据分析]]></category>
		<guid isPermaLink="false">https://mylogs.cn/excel%e7%9b%ae%e6%a0%87%e6%90%9c%e7%b4%a2%ef%bc%9a%e5%ae%9a%e5%a5%bd%e7%9b%ae%e6%a0%87%e5%80%bc%ef%bc%8c%e8%ae%a9%e8%a1%a8%e6%a0%bc%e5%8f%8d%e6%8e%a8%e7%bc%ba%e5%8f%a3/</guid>

					<description><![CDATA[很多人在用 Excel 做计划时都卡在一个地方：表格很擅长&#8221;正向算&#8221;——填好销量和单价 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">很多人在用 Excel 做计划时都卡在一个地方：表格很擅长&#8221;正向算&#8221;——填好销量和单价，自动算出提成；却很难&#8221;反向问&#8221;——你想让提成达到 600 元，到底还要多卖多少？</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a853cd4c2ba4&quot;}" data-wp-interactive="core/image" data-wp-key="6a853cd4c2ba4" class="wp-block-image size-large aligncenter wp-lightbox-container"><img decoding="async" width="1200" height="675" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/40afb469263c62566bdf3c3a8184fcfb_header.webp" alt="Excel目标搜索：定好目标值，让表格反推缺口" class="wp-image-4460" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/40afb469263c62566bdf3c3a8184fcfb_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/40afb469263c62566bdf3c3a8184fcfb_header-300x169.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/40afb469263c62566bdf3c3a8184fcfb_header-1024x576.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/40afb469263c62566bdf3c3a8184fcfb_header-768x432.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：MakeUseOf</figcaption></figure>





<p class="wp-block-paragraph">Excel 自带的&#8221;假设分析&#8221;工具里，有一项&#8221;目标搜索（Goal Seek）&#8221;就是专门反推答案的。它把公式的结果钉住，反过来算出需要变动的那个输入值。</p>



<h2 class="wp-block-heading">一、打开目标搜索</h2>



<ol class="wp-block-list"><li>切到&#8221;数据&#8221;选项卡；</li><li>点击&#8221;假设分析&#8221;，在下拉菜单里选择&#8221;目标搜索&#8221;。</li></ol>



<h2 class="wp-block-heading">二、填好三个参数</h2>



<p class="wp-block-paragraph">目标搜索只需三个框，缺一不可：</p>



<ol class="wp-block-list"><li><strong>设为目标值的单元格</strong>：填装着结果的公式，例如提成金额所在格；</li><li><strong>目标值</strong>：填你希望它变成的数字，比如 600；</li><li><strong>可变单元格</strong>：填允许改动的输入，例如&#8221;已售件数&#8221;。注意它必须是纯数值，不能是公式。</li></ol>



<p class="wp-block-paragraph">一个前提：目标单元格里的公式必须依赖可变单元格，否则 Excel 会直接拒绝运行。</p>



<h2 class="wp-block-heading">三、读取结果再确认</h2>



<p class="wp-block-paragraph">填好后点&#8221;确定&#8221;，Excel 会弹出&#8221;目标搜索状态&#8221;窗口。以一张销售提成表为例：提成按 5% 计算，把目标值设为 600、可变单元格指向&#8221;已售件数&#8221;，结果约 79.5 件——也就是比当前多卖约 30 件。若把可变单元格换成&#8221;提成比例&#8221;，同样的目标会指向约 7.9%。</p>



<h2 class="wp-block-heading">注意事项</h2>



<ul class="wp-block-list"><li>目标搜索会把答案直接写进可变单元格，且<strong>没有撤销提示</strong>。运行前先把原始数值复制到别处，或在副本工作表上操作。</li><li>它一次只能改一个输入，也不验证合理性：目标定得太高，它可能返回一个远超实际的数字。</li><li>结果是迭代逼近值，允许误差在&#8221;文件 → 选项 → 公式&#8221;里的&#8221;最多迭代次数&#8221;与&#8221;最大误差&#8221;中设定，金额上通常只差几分。</li><li>若涉及两个以上的未知数，改用同菜单下的&#8221;规划求解（Solver）&#8221;；想并排比较几组参数，用&#8221;方案管理器&#8221;。</li></ul>



<p class="wp-block-paragraph">来源：MakeUseOf</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
