
📖 资源简介
今天分享一套【保姆级教学】Python爬虫、Selenium、移动端爬虫Appium的课程资源,内容挺系统的,适合想认真学习的同学。
✨ 资源亮点
- 内容扎实:74节视频课程,跟着老师一步步操作,比自学摸索快得多。
📚 课程内容
资源清单
| 类型 | 数量 |
|---|---|
| 视频教程 | 74 节 |
| 压缩文件 | 0 个 |
| 其他文件 | 6 个 |
| 合计 | 80 |
这套课程在讲什么
这是一条从”会发请求”到”能抓移动端”的完整爬虫进阶路线:先打牢 requests + 解析库的静态站基本功,再用 Selenium 攻克 JS 动态渲染页面,最后用 Appium 把战场搬到手机 App 上。三块内容层层递进,正好对应真实工作中”网站越来越难抓”的三种典型形态。
一、为什么爬虫值得花时间学
数据是决策的燃料。无论是比价、舆情监控、竞品分析,还是做 NLP 语料,第一步往往都是”把公开数据拿下来”。Python 之所以是爬虫首选语言,原因有三:
- 生态成熟:
requests处理 HTTP、BeautifulSoup/lxml解析 HTML、Scrapy做分布式框架,工具链开箱即用。 - 门槛适中:几行代码就能发出一个请求,不需要像 Java 那样写一堆样板。
- 自动化能力强:浏览器自动化(Selenium)、移动端自动化(Appium)都有成熟 Python 客户端。
但要强调一句:爬虫是把双刃剑。正式开始前,请先读目标站点根目录下的 robots.txt,遵守《 robots 协议》,控制请求频率,不要抓取个人信息、付费墙后内容或明确禁止采集的数据。技术是中性的,法律红线必须心里有数。
二、静态爬虫基本功:requests + 解析
2.1 发请求:GET 与 POST
requests 是最常用的 HTTP 库。GET 拿数据,POST 提交表单,记得带上 headers 伪装成浏览器,否则很多站点会直接拒绝。
import requests
headers = {
"User-Agent": ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/124.0 Safari/537.36"),
"Referer": "https://example.com/",
}
# GET:参数拼在 params 里,自动 URL 编码

resp = requests.get(
"https://httpbin.org/get",
params={"q": "python", "page": 1},
headers=headers,
timeout=10,
)
print(resp.status_code) # 200
print(resp.json()) # 自动解析 JSON
# POST:表单 / JSON 两种常见提交方式

form_resp = requests.post(
"https://httpbin.org/post",
data={"username": "demo", "password": "123456"}, # 表单
headers=headers,
timeout=10,
)
json_resp = requests.post(
"https://httpbin.org/post",
json={"username": "demo"}, # 自动加 Content-Type: application/json
headers=headers,
timeout=10,
)
2.2 用 Session 保持登录态
很多页面需要登录才能访问,本质是带上 Cookie。手动管理 Cookie 很麻烦,requests.Session() 会自动帮你维护会话:
session = requests.Session()
session.headers.update(headers)
# 第一次登录,Session 自动保存 Set-Cookie

session.post("https://example.com/login",
data={"user": "demo", "pass": "123456"})
# 后续请求自动携带 Cookie,像浏览器一样

resp = session.get("https://example.com/orders")
print(resp.text)
2.3 解析 HTML:BeautifulSoup 与 XPath
拿到网页源码后,要从 HTML 树里把需要的字段抠出来。两种主流写法:
from bs4 import BeautifulSoup
html = resp.text
soup = BeautifulSoup(html, "lxml")
# find / find_all:按标签、属性筛选

first_title = soup.find("h1", class_="title")
items = soup.find_all("div", class_="card")
# CSS 选择器:写起来更像前端

titles = soup.select("div.card h2 a")
for a in titles:
print(a.get_text(strip=True), a["href"])
# XPath 写法(配合 lxml)

from lxml import etree
tree = etree.HTML(html)
# 取所有 class 为 card 的 div 下的链接文本和 href

rows = tree.xpath('//div[@class="card"]/h2/a')
for a in rows:
print(a.text, a.get("href"))
选择建议:结构规则、类名稳定的页面用 CSS 选择器最省心;需要复杂条件(轴、父级回溯、文本包含)时 XPath 更强大。
三、动态页面:Selenium 自动化
现在大量网站是 Vue/React 单页应用,数据靠 JS 异步加载,requests 直接拿到的是空壳 HTML。这时候就得上”真浏览器”——Selenium 驱动一个 Chrome,让页面像人浏览一样渲染完再取数。
3.1 八个元素定位方式
Selenium 提供 8 种定位方式,最常用的是按 ID、CSS 选择器和 XPath:
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com")
driver.find_element(By.ID, "kw") # by id
driver.find_element(By.NAME, "wd") # by name
driver.find_element(By.CLASS_NAME, "btn") # by class
driver.find_element(By.TAG_NAME, "div") # by tag
driver.find_element(By.CSS_SELECTOR, "#kw") # by css selector
driver.find_element(By.XPATH, '//input[@id="kw"]') # by xpath
3.2 显式等待 vs 隐式等待:90% 的报错都来自它
动态页面元素是异步出现的,脚本一上来就 find_element 多半抛 NoSuchElementException。正确姿势是用显式等待:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, timeout=10, poll_frequency=0.5)
# 等到 #kw 可点击,最多等 10 秒,每 0.5 秒轮询一次

box = wait.until(EC.element_to_be_clickable((By.ID, "kw")))
box.send_keys("python")
- 隐式等待
driver.implicitly_wait(10):对所有元素查找统一设置兜底超时,简单但不够灵活。 - 显式等待
WebDriverWait + expected_conditions:精确到某个条件出现,生产代码首选。
3.3 无头模式与性能优化
调试时要看浏览器窗口,上线后没必要弹窗,用 headless 模式:
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless=new") # 无头,不弹窗
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_argument("window-size=1920,1080")
options.add_argument("--disable-blink-features=AutomationControlled") # 降低被识别概率
driver = webdriver.Chrome(options=options)
最佳实践:用完一定 driver.quit() 释放进程;高频抓取时配合 time.sleep 或随机延时,别把对方服务器打挂。
四、反爬与合规
真正的站点不会让你这么舒服地抓,常见反爬手段和应对:
| 反爬手段 | 应对思路 |
|---|---|
| 校验 User-Agent | 维护 UA 池,每次请求随机切换 |
| IP 频率限制 | 代理 IP 池 + 请求间隔随机化 |
| 登录态校验 | 用 Session 复用 Cookie,或 Selenium 登录后导出 |
| 滑块/图形验证码 | 打码平台(注意合规),或改用手动登录后长期复用 Cookie |
| JS 混淆加密 | 逆向 JS 或直接上 Selenium/Playwright |
| 字体反爬 | 解析woff字体映射表还原真实字符 |
再次强调合规:频率控制是底线,抓到 429/封 IP 就该立刻降速;不要绕过付费墙、不要抓取个人隐私数据、不要对政府/金融类站点做高频请求。
五、移动端:Appium 抓 App
很多数据只在 App 里有,网页版根本不开放。Appium 是移动端自动化框架,原理和 Selenium 几乎一样——它把 WebDriver 协议扩展到了 iOS/Android。
5.1 Desired Capabilities:告诉 Appium 你要测什么
from appium import webdriver
caps = {
"platformName": "Android", # 或 iOS
"deviceName": "emulator-5554",
"appPackage": "com.example.app", # 待测 App 包名
"appActivity": ".MainActivity", # 启动的 Activity
"noReset": True, # 不清除 App 数据,保留登录态
}
driver = webdriver.Remote(
"http://127.0.0.1:4723/wd/hub",
caps,
)
5.2 元素定位与操作
App 上的元素定位靠 uiautomatorviewer 或 Appium Inspector 抓控件树:
from appium.webdriver.common.appiumby import AppiumBy
# 按 resource-id / text / xpath 定位

driver.find_element(AppiumBy.ID, "com.example.app:id/search_btn").click()
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,
'new UiSelector().text("关注")').click()
# 滑动、输入、截屏都是标准 API

driver.find_element(AppiumBy.ID, "com.example.app:id/keyword").send_keys("爬虫")
driver.swipe(500, 1500, 500, 500, 500) # 上滑翻页
学习 Appium 最大的坑是环境:Android SDK、SDK Build-Tools、平台工具、模拟器/真机、Appium Server 版本必须对齐。建议严格跟着课程一节节搭环境,别自己跳步。
六、学习路线建议
按课程顺序推进,效果最好:
- 第一阶段(静态站):requests 发请求 → BeautifulSoup/XPath 解析 → 写一个完整的列表页+详情页爬虫。
- 第二阶段(工程化):加请求头池、延时、异常重试、数据落库(CSV/SQLite)。
- 第三阶段(动态站):Selenium 元素定位 → 显式等待 → 无头模式 → 模拟登录。
- 第四阶段(移动端):搭 Appium 环境 → 定位工具使用 → 写一个 App 内信息流抓取脚本。
七、常见问题 FAQ
Q1:requests 拿到的页面和浏览器里看到的不一样? 大概率是 JS 动态渲染。打开 DevTools → Network 看 XHR 请求,能直接找到接口就用 requests 调接口;找不到再上 Selenium。
Q2:Selenium 偶尔报 NoSuchElementException?
几乎都是没等元素出现。全局换成显式等待,别用 time.sleep(3) 这种硬编码。
Q3:被封 IP 了怎么办? 立刻停手。检查 robots.txt 和请求频率,降速、换代理后再试;如果对方明确禁止,就放弃。
Q4:Appium 启动报 session 异常?
90% 是 appPackage / appActivity 写错,或者 Appium Server 没起来。先用 adb devices 确认设备在线,再用 uiautomatorviewer 重新抓包名。
八、写在最后
爬虫的核心不是某个库,而是”读懂一个站点怎么工作”。把请求抓包、渲染流程、反爬策略这三件事练熟,换任何语言框架都是一周上手的事。跟着这套 74 节课程把四个阶段都亲手跑一遍,再拿一个自己感兴趣的小站点练手,比看十篇博客都管用。
资源获取
💡 建议:尽快保存到本地网盘或电脑,避免分享链接后期失效。
整理不易,如果对你有帮助,欢迎分享给更多需要的朋友。













请登录后查看评论内容