大纲
- 什么是网路爬虫:介绍网路爬虫的基本概念和用途。
- 爬虫的应用场景:如资料撷取、数据分析等。
- 安装 Python:指导如何安装 Python 环境。
- 安装 pip3:确认 pip3 是否已安装,并介绍其用途。
- 安装必要函式库:requests beautifulsoup4
- 发送 HTTP 请求:使用 requests 库发送 GET 请求。
- HTML 基础知识:介绍 HTML 结构及常见标籤。
- 使用 BeautifulSoup 解析网页内容
- PTT 网页爬虫:爬取特定版面的文章标题和连结。
- 反爬虫技术:如何处理网站的反爬虫机制。
- 错误处理:如何处理请求失败或解析错误的情况。
- 进阶主题:如 Selenium、自动化测试等
爬虫概述
什么是网路爬虫网路爬虫(Web Crawler),也称为网路蜘蛛(Spider),是一种自动化的软件应用程式,旨在自动浏览互联网并执行特定任务。这些任务通常涉及向网站发送请求,获取网页内容,并从中提取有用的资讯。许多搜寻引擎(如 Google 和 Bing)使用网路爬虫来收集和索引网站内容,以便用户在搜寻时能够快速找到相关资料。当用户在浏览器中打开一个网页时,实际上是向伺服器发送请求(request),伺服器再回传相应的资料(response)。网路爬虫则是自动化这一过程,能够高效地撷取伺服器回传的特定资料,并进行后续分析和处理
爬虫的应用场景网路爬虫的应用范围非常广泛,主要包括以下几个方面:资料撷取:许多开发者使用爬虫技术从各种网站上提取数据,例如价格比较、新闻聚合、社交媒体数据分析等。数据分析:爬取大量数据后,可以进行深入分析,帮助企业做出更明智的决策,例如市场趋势分析、用户行为研究等。搜寻引擎索引:搜寻引擎利用爬虫收集网站内容并建立索引,使得用户能够快速搜寻到所需资讯。竞争对手监控:企业可以使用爬虫监控竞争对手的网站,以获取有关产品价格、促销活动和市场策略的信息。
爬虫如何伪装成真人以避免被阻挡
在进行网页爬取时,需採取多种措施将爬虫伪装成人类的正常行为,降低被伺服器侦测和阻挡的风险。以下是几个重要的策略:
尽量减少请求次数目标:用最少的请求获取最多的资料。方法 1:一次抓取整个网页的完整数据,并在本地筛选需要的部分。方法 2:请求能够返回大量数据的 API 或多项内容的页面,避免频繁多次抓取。建议工具:开发时可使用 .ipynb(Jupyter Notebook),分段执行代码,每次修改后仅重新执行特定的部分。这样可以避免多次向伺服器发送请求。开发完成后再将代码移至 .py 档案中运行。
本机处理速度优先于伺服器请求爬虫应在本地快速筛选和处理抓取到的资料,减少与伺服器的互动次数:策略:一次性抓取整页资料,减少重复请求。抓取后在本地使用正则表达式或解析工具(如 BeautifulSoup)提取所需的部分。
避免高频率请求
- 风险:高频率请求会被伺服器判断为非正常行为,甚至视为阻断服务攻击(DoS)。
- DoS:单一来源高频率请求,可能导致伺服器拒绝服务。
- DDoS:多个来源同时发动请求,伺服器可能会封锁 IP 或帐号。
解决方案:
- 在每次请求之间加入随机延迟时间,例如使用 time.sleep() 或专门的随机延迟模组(如 fake_useragent 和 random)。
- 模拟人类行为:例如不规则的时间间隔,或者假装在浏览页面。
headers = {
\'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36\',
\'Accept-Language\': \'en-US,en;q=0.9\',
\'Connection\': \'keep-alive\',
}
使用代理 IP(proxy)来分散请求来源,避免单一 IP 被封锁。
- 使用 .ipynb 开发:
- 可分步调试爬虫代码,在抓取资料后,逐步定位和解析需要的部分。
- 减少重复向伺服器发送请求的机会。
- 最后转换为 .py:
- 完成代码后,将 .ipynb 文件的内容整理并转换为 .py 文件,用于实际运行。
- 核心模组:
- requests:用于发送 HTTP 请求,适合处理静态网页抓取。
- selenium:用于控制浏览器,适合动态加载的网页。
- pandas:擅长处理结构化的数据,例如从 API 抓取 JSON 或 CSV 格式的数据。
- 间隔时间控制:使用 time.sleep 与 random 结合,在每次请求之间添加随机延迟,模拟人类行为,降低被伺服器侦测的风险。
6-2. 执行进度监控模组:tqdm:用于显示进度条,帮助在大量资料抓取时掌握进度。
6-3. 资料解析
- 解析网页原始码:BeautifulSoup:解析 HTML 结构化数据,提取所需内容。
- 解析 JSON 格式数据:json:用于解析 JSON 格式的字串。
- pandas:快速转换 JSON 为结构化数据表。
- 处理 CSV 档案:
- pandas:读取与处理 CSV 档案。
6-4. 资料前处理
- 正则表达式:re:用于字串模式匹配与提取。
- 时间处理:datetime:用于处理时间与日期相关的数据。
6-5. 通知功能当需要在爬虫发现新数据或异常情况时,进行即时通知:
-
寄信通知:smtplib + email:用于配置 SMTP 服务发送邮件。SSL:保障邮件传输安全性。
-
LINE 通知:LINE Notify:将于 2025 年 3 月 31 日停止服务,可考虑替代方案:改为使用 LINE Bot 进行通知。
-
寄信给自己。开发桌面应用程式(使用 tkinter 或 PyQt6),显示通知弹窗。
6-6. 资料存储与管理
- 档案存储:pandas:存储抓取的数据为 CSV 或 Excel 格式。
- 档案管理:os:处理档案与目录操作。
- glob:进行批量档案搜索与处理。
6-7. 特殊情境与解决方案网站防爬破解:如果常规爬虫工具无法抓取资料,可以考虑使用 pyautogui 撰写模拟键盘与滑鼠操作的外挂。注意:此方法会暂时失去电脑控制权,建议搭配 tkinter 制作遥控器,方便随时暂停或终止程式执行。
Python爬虫 基础教学, 环境準备进阶Python爬虫-自动更新header文章