Python 网络爬虫实战:从基础到高级爬取技术

📝个人主页🌹:一ge科研小菜鸡-CSDN博客
🌹🌹期待您的关注 🌹🌹

1. 引言

网络爬虫(Web Scraping)是一种自动化技术,利用程序从网页中提取数据,广泛应用于数据采集、搜索引擎、市场分析、舆情监测等领域。本教程将涵盖 requests、BeautifulSoup、Selenium、Scrapy 等常用工具,并深入探讨 反爬机制突破、动态加载页面、模拟登录、多线程/分布式爬取等高级技巧。


2. 爬虫基础:requests + BeautifulSoup

2.1 安装依赖

pip install requests beautifulsoup4 lxml

2.2 使用 requests 获取网页内容

import requestsurl = "https://news.ycombinator.com/"
headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers)print(response.status_code)  # 返回 200 说明成功获取网页
print(response.text[:500])   # 预览部分 HTML 内容

2.3 使用 BeautifulSoup 解析 HTML

from bs4 import BeautifulSoupsoup = BeautifulSoup(response.text, "lxml")# 获取所有新闻标题
titles = soup.find_all("a", class_="titlelink")
for title in titles:print(title.text, title["href"])

3. 爬取动态页面:Selenium

3.1 安装 Selenium

pip install selenium webdriver-manager

并下载浏览器驱动(如 ChromeDriver)。

3.2 自动化浏览器

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager# 启动浏览器
options = webdriver.ChromeOptions()
options.add_argument("--headless")  # 无头模式
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)# 访问网页
driver.get("https://news.ycombinator.com/")
titles = driver.find_elements(By.CLASS_NAME, "titlelink")for title in titles:print(title.text, title.get_attribute("href"))driver.quit()

4. 模拟登录

许多网站需要用户登录后才能访问数据,例如 GitHub、微博等。

4.1 requests + Session 登录

login_url = "https://github.com/login"
session = requests.Session()# 获取登录页面
resp = session.get(login_url, headers=headers)
soup = BeautifulSoup(resp.text, "lxml")# 获取隐藏的 CSRF 令牌
auth_token = soup.find("input", {"name": "authenticity_token"})["value"]# 发送登录请求
login_data = {"login": "your_username","password": "your_password","authenticity_token": auth_token
}
session.post("https://github.com/session", data=login_data, headers=headers)# 爬取登录后的页面
profile_page = session.get("https://github.com/settings/profile")
print(profile_page.text)

5. 处理反爬机制

5.1 使用代理

proxies = {"http": "http://your_proxy:port","https": "https://your_proxy:port"
}
response = requests.get(url, headers=headers, proxies=proxies)

5.2 伪装请求头

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/91.0.4472.124 Safari/537.36","Referer": "https://www.google.com","Accept-Language": "en-US,en;q=0.9"
}

5.3 随机休眠

import time
import randomtime.sleep(random.uniform(1, 5))  # 随机等待 1-5 秒

6. Scrapy 爬虫框架

6.1 安装 Scrapy

pip install scrapy

6.2 创建 Scrapy 爬虫

scrapy startproject myspider
cd myspider
scrapy genspider hackernews news.ycombinator.com

6.3 编写 Scrapy 爬虫

编辑 myspider/spiders/hackernews.py

import scrapyclass HackerNewsSpider(scrapy.Spider):name = "hackernews"start_urls = ["https://news.ycombinator.com/"]def parse(self, response):for item in response.css(".titlelink"):yield {"title": item.css("::text").get(),"link": item.css("::attr(href)").get()}

6.4 运行爬虫

scrapy crawl hackernews -o results.json

7. 爬虫性能优化

7.1 多线程爬取

import threadingdef fetch(url):response = requests.get(url, headers=headers)print(url, response.status_code)urls = ["https://example.com/page{}".format(i) for i in range(1, 11)]threads = [threading.Thread(target=fetch, args=(url,)) for url in urls]
for thread in threads:thread.start()
for thread in threads:thread.join()

7.2 分布式爬取(Scrapy + Redis)

pip install scrapy-redis

在 Scrapy settings.py 中:

SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
REDIS_URL = "redis://localhost:6379"

8. 结语

本教程系统地介绍了 Python 网络爬虫的各个关键环节,涵盖了从基础到高级的技术应用。首先,我们使用 requests + BeautifulSoup 进行基本的静态页面爬取,并掌握了 HTML 解析的核心方法。接着,我们通过 Selenium 处理动态加载的网页,了解了如何模拟浏览器操作,提高数据抓取的灵活性。在数据访问受限的情况下,我们学习了 模拟登录 技术,掌握了如何绕过身份验证,获取登录后才能访问的数据。

除此之外,为了应对网站的反爬机制,我们介绍了 代理 IP 轮换、User-Agent 伪装、请求头优化、随机休眠 等策略,以降低被封 IP 的风险。同时,我们还探讨了 Scrapy 框架的应用,包括爬取大型网站、数据管道管理,以及如何结合 Redis 进行分布式爬取,以提升数据采集的效率。

在实际应用中,网络爬虫广泛应用于搜索引擎、电子商务数据分析、舆情监测、金融风控、学术研究等领域。然而,我们在使用爬虫技术的同时,也需要关注数据合规性和法律风险,避免爬取受版权保护或敏感数据的网站,遵循网站的 robots.txt 规范,合理使用爬取工具,确保数据的合法合规性。

未来,随着反爬机制的不断升级,我们可能需要借助机器学习和深度学习技术来识别验证码、自动分析网页结构,提高爬取的智能化程度。同时,随着云计算和分布式技术的发展,大规模数据抓取将更加依赖分布式爬虫架构,如结合Kafka、Spark Streaming 等工具,实现高效、实时的数据采集和处理。

希望本教程能帮助你入门和深入理解 Python 爬虫技术,在实践中灵活运用各种工具,提高数据抓取的稳定性和效率。如果你对网络爬虫有更深入的需求,可以进一步学习图像识别验证码破解、基于 AI 的网页结构解析、深度强化学习爬虫策略优化等前沿技术,探索更多爬取的可能性!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/11574.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows程序设计10:文件指针及目录的创建与删除

文章目录 前言一、文件指针是什么?二、设置文件指针的位置:随机读写,SetFilePointer函数1.函数说明2.函数实例 三、 目录的创建CreateDirectory四、目录的删除RemoveDirectory总结 前言 Windows程序设计10:文件指针及目录的创建与…

关于安卓greendao打包时报错问题修复

背景 项目在使用greendao的时候,debug安装没有问题,一到打包签名就报了。 环境 win10 jdk17 gradle8 项目依赖情况 博主的greendao是一个独立的module项目,项目目前只适配了java,不支持Kotlin。然后被外部集成。greendao版本…

设计模式 - 行为模式_Template Method Pattern模板方法模式在数据处理中的应用

文章目录 概述1. 核心思想2. 结构3. 示例代码4. 优点5. 缺点6. 适用场景7. 案例:模板方法模式在数据处理中的应用案例背景UML搭建抽象基类 - 数据处理的 “总指挥”子类定制 - 适配不同供应商供应商 A 的数据处理器供应商 B 的数据处理器 在业务代码中整合运用 8. 总…

FlashAttention v1 论文解读

论文标题:FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness 论文地址:https://arxiv.org/pdf/2205.14135 FlashAttention 是一种重新排序注意力计算的算法,它无需任何近似即可加速注意力计算并减少内存占用。…

stm32硬件实现与w25qxx通信

使用的型号为stm32f103c8t6与w25q64。 STM32CubeMX配置与引脚衔接 根据stm32f103c8t6引脚手册,采用B12-B15四个引脚与W25Q64连接,实现SPI通信。 W25Q64SCK(CLK)PB13MOSI(DI)PB15MISO(DO)PB14CS&#xff08…

软件工程概论试题五

一、多选 1.好的软件的基本属性包括()。 A. 效率 B. 可依赖性和信息安全性 C. 可维护性 D.可接受性 正答:ABCD 2.软件工程的三要素是什么()? A. 结构化 B. 工具 C.面向对象 D.数据流! E.方法 F.过程 正答:BEF 3.下面中英文术语对照哪些是正确的、且是属…

FBX SDK的使用:基础知识

Windows环境配置 FBX SDK安装后,目录下有三个文件夹: include 头文件lib 编译的二进制库,根据你项目的配置去包含相应的库samples 官方使用案列 动态链接 libfbxsdk.dll, libfbxsdk.lib是动态库,需要在配置属性->C/C->预…

知识库管理在提升企业决策效率与知识共享中的应用探讨

内容概要 知识库管理是指企业对内部知识、信息进行系统化整理和管理的过程,其重要性在于为企业决策提供了坚实的数据支持与参考依据。知识库管理不仅能够提高信息的获取速度,还能有效减少重复劳动,提升工作效率。在如今快速变化的商业环境中…

基于vue船运物流管理系统设计与实现(源码+数据库+文档)

船运物流管理系统目录 目录 基于springboot船运物流管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员登录 2、货运单管理 3、公告管理 4、公告类型管理 5、新闻管理 6、新闻类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考…

【自然语言处理(NLP)】深度学习架构:Transformer 原理及代码实现

文章目录 介绍Transformer核心组件架构图编码器(Encoder)解码器(Decoder) 优点应用代码实现导包基于位置的前馈网络残差连接后进行层规范化编码器 Block编码器解码器 Block解码器训练预测 个人主页:道友老李 欢迎加入社…

Spring Boot 实例解析:配置文件

SpringBoot 的热部署&#xff1a; Spring 为开发者提供了一个名为 spring-boot-devtools 的模块来使用 SpringBoot 应用支持热部署&#xff0c;提高开发者的效率&#xff0c;无需手动重启 SpringBoot 应用引入依赖&#xff1a; <dependency> <groupId>org.springfr…

Linux网络 HTTPS 协议原理

概念 HTTPS 也是一个应用层协议&#xff0c;不过 是在 HTTP 协议的基础上引入了一个加密层。因为 HTTP的内容是明文传输的&#xff0c;明文数据会经过路由器、wifi 热点、通信服务运营商、代理服务器等多个物理节点&#xff0c;如果信息在传输过程中被劫持&#xff0c;传输的…

java练习(5)

ps:题目来自力扣 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这…

深入 Rollup:从入门到精通(三)Rollup CLI命令行实战

准备阶段&#xff1a;初始化项目 初始化项目&#xff0c;这里使用的是pnpm&#xff0c;也可以使用yarn或者npm # npm npm init -y # yarn yarn init -y # pnpm pnpm init安装rollup # npm npm install rollup -D # yarn yarn add rollup -D # pnpm pnpm install rollup -D在…

MySQL数据库环境搭建

下载MySQL 官网&#xff1a;https://downloads.mysql.com/archives/installer/ 下载社区版就行了。 安装流程 看b站大佬的视频吧&#xff1a;https://www.bilibili.com/video/BV12q4y1477i/?spm_id_from333.337.search-card.all.click&vd_source37dfd298d2133f3e1f3e3c…

松灵机器人 scout ros2 驱动 安装

必须使用 ubuntu22 必须使用 链接的humble版本 #打开can 口 sudo modprobe gs_usbsudo ip link set can0 up type can bitrate 500000sudo ip link set can0 up type can bitrate 500000sudo apt install can-utilscandump can0mkdir -p ~/ros2_ws/srccd ~/ros2_ws/src git cl…

【最长上升子序列Ⅱ——树状数组,二分+DP,纯DP】

题目 代码&#xff08;只给出树状数组的&#xff09; #include <bits/stdc.h> using namespace std; const int N 1e510; int n, m; int a[N], b[N], f[N], tr[N]; //f[i]表示以a[i]为尾的LIS的最大长度 void init() {sort(b1, bn1);m unique(b1, bn1) - b - 1;for(in…

Linux安装zookeeper

1, 下载 Apache ZooKeeperhttps://zookeeper.apache.org/releases.htmlhttps://zookeeper.apache.org/releases.htmlhttps://zookeeper.apache.org/releases.htmlhttps://zookeeper.apache.org/releases.htmlhttps://zookeeper.apache.org/releases.htmlhttps://zookeeper.apa…

day6手机摄影社区,可以去苹果摄影社区学习拍摄技巧

逛自己手机的社区&#xff1a;即&#xff08;手机牌子&#xff09;摄影社区 拍照时防止抖动可以控制自己的呼吸&#xff0c;不要大喘气 拍一张照片后&#xff0c;如何简单的用手机修图&#xff1f; HDR模式就是让高光部分和阴影部分更协调&#xff08;拍风紧时可以打开&…

linux本地部署deepseek-R1模型

国产开源大模型追平甚至超越了CloseAI的o1模型&#xff0c;大国崛起时刻&#xff01;&#xff01;&#xff01; DeepSeek R1 本地部署指南   在人工智能技术飞速发展的今天&#xff0c;本地部署AI模型成为越来越多开发者和企业关注的焦点。本文将详细介绍如何在本地部署DeepS…