导读:
你想了解在编写 Python 爬虫时需要重点关注和注意的事项,这是一个非常关键的问题,尤其是对于新手来说,掌握这些要点能让你的爬虫更合规、更稳定、更高效。
...
你想了解在编写 Python 爬虫时需要重点关注和注意的事项,这是一个非常关键的问题,尤其是对于新手来说,掌握这些要点能让你的爬虫更合规、更稳定、更高效。
一、核心注意事项(按优先级排序)
1. 遵守法律法规与网站规则(最重要)
- robots 协议:几乎所有网站根目录下都有
robots.txt(如https://www.xxx.com/robots.txt),它规定了网站允许 / 禁止爬虫访问的内容。虽然不具备法律强制力,但遵守它是爬虫开发者的基本操守。python运行# 示例:查看并解析robots.txt(使用robotparser库) from urllib.robotparser import RobotFileParser rp = RobotFileParser() rp.set_url('https://www.baidu.com/robots.txt') rp.read() # 检查是否允许爬取某个路径 print(rp.can_fetch('*', 'https://www.baidu.com/s')) # 返回True/False - 法律红线:
- 不得爬取涉及隐私、敏感信息(如用户手机号、身份证、未公开的商业数据)的内容;
- 不得突破网站的访问限制(如破解登录、绕过反爬措施进行恶意爬取);
- 爬取的数据不得用于非法用途(如倒卖、侵权)。
- 网站条款:很多网站的 “用户协议” 里明确禁止爬虫,爬取前务必查看。
2. 控制爬取频率,避免给服务器造成压力
- 设置请求间隔:使用
time.sleep()或更灵活的random.uniform()随机间隔,避免高频请求。python运行import time import random # 每次请求后随机等待1-3秒 time.sleep(random.uniform(1, 3)) - 限制并发数:使用
requests.Session()保持连接复用,或用aiohttp异步爬虫时控制并发量(避免同时发起上百个请求)。 - 避免高峰期爬取:尽量在网站访问低峰期(如凌晨)爬取,减少对服务器的影响。
3. 处理反爬机制
新手最常遇到的问题就是被网站反爬,核心应对思路是 “模拟真人行为”:
- 设置请求头(Headers):至少带上
User-Agent(模拟浏览器),必要时补充Referer、Cookie、Accept等。python运行import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Referer': 'https://www.xxx.com/' # 表示请求来源 } response = requests.get('https://www.xxx.com', headers=headers) - 使用代理 IP:如果爬取量较大,单一 IP 容易被封禁,可使用免费 / 付费代理池轮换 IP。
python运行
proxies = { 'http': 'http://123.45.67.89:8080', 'https': 'https://123.45.67.89:8080' } response = requests.get('https://www.xxx.com', proxies=proxies) - 处理验证码:简单验证码可使用
ddddocr识别,复杂验证码(滑块、点选)可考虑第三方打码平台,或直接绕开(如模拟登录后携带 Cookie)。 - 动态渲染页面:如果页面是 JS 动态加载的(如 Ajax、Vue/React 渲染),可使用
Selenium、Playwright模拟浏览器渲染,或直接抓包获取接口数据(更高效)。
4. 代码健壮性与数据处理
- 异常处理:对网络请求、数据解析、文件读写等环节加异常捕获,避免爬虫中途崩溃。
python运行
import requests from requests.exceptions import RequestException try: response = requests.get('https://www.xxx.com', timeout=10) response.raise_for_status() # 抛出HTTP状态码异常(如404、500) response.encoding = response.apparent_encoding # 自动识别编码 except RequestException as e: print(f'请求失败:{e}') - 数据持久化:爬取的数据及时保存(如 CSV、JSON、MySQL),避免爬取完成后数据丢失。
- 去重与校验:对爬取的 URL、数据内容做去重处理,校验数据格式(如手机号、邮箱),保证数据准确性。
5. 其他实用技巧
- 使用 Session 保持会话:爬取需要登录的网站时,用
requests.Session()保存 Cookie,避免重复登录。 - 日志记录:使用
logging模块记录爬虫运行日志(如请求成功 / 失败、爬取数量),方便排查问题。python运行import logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', filename='spider.log' # 日志保存到文件 ) logging.info('爬虫启动') logging.error('请求失败:IP被封禁') - 分布式 / 增量爬取:如果爬取量极大,可使用
Scrapy-Redis实现分布式爬虫;定期爬取时,只爬取新增内容(增量爬取),减少资源消耗。
总结
- 合规优先:遵守 robots 协议和法律法规,不爬取敏感数据,这是爬虫开发的底线;
- 模拟真人:控制爬取频率、设置合理请求头、使用代理 IP,避免被网站反爬封禁;
- 健壮性:做好异常处理、日志记录和数据持久化,保证爬虫稳定运行且数据不丢失。
掌握这些要点,你的 Python 爬虫不仅能完成基本的爬取任务,还能在合规、稳定、高效上达到更专业的水平。
如果用Python来做app自动化测试
你想了解如何用 Python 来实现 APP 自动化测试,这是移动端测试中非常实用的技能,Python 凭借丰富的库和简洁的语法,成为 APP 自动化测试的主流选择。
一、核心技术栈选择
做 APP 自动化测试,Python 生态下最主流的是 Appium + Python 组合,它支持 iOS 和 Android 双平台,且能跨应用测试,是行业通用方案。
1. 环境准备(关键前置步骤)
在写代码前,必须先搭好环境,这是新手最容易踩坑的地方:
- 基础环境:Python 3.7+(推荐 3.8-3.10)、pip 包管理工具
- 移动端依赖:
- Android:安装 Android SDK(或 Android Studio),配置
ANDROID_HOME环境变量;确保设备 / 模拟器开启 USB 调试 - iOS:需 Mac 系统,安装 Xcode、WebDriverAgent
- Android:安装 Android SDK(或 Android Studio),配置
- 核心库安装:
bash运行
# 安装Appium Python客户端 pip install appium-python-client # 可选:安装pytest用于测试用例管理,allure用于测试报告 pip install pytest pytest-html allure-pytest - Appium 服务:下载并安装 Appium Server(或用命令行启动
appium),用于连接 Python 脚本和移动设备。
2. 核心代码示例(Android 端)
以下是一个完整的 APP 自动化测试示例(以打开 “设置” APP,点击 “WLAN” 为例),包含最核心的元素定位、操作和异常处理:
python
运行
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
from selenium.common.exceptions import NoSuchElementException, TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
# 1. 配置Desired Capabilities(核心配置,告诉Appium要操作的设备/APP)
desired_caps = {
"platformName": "Android", # 系统类型:Android/iOS
"platformVersion": "11", # 系统版本(如手机的Android版本)
"deviceName": "emulator-5554", # 设备名(模拟器/真机序列号,可通过adb devices查看)
"appPackage": "com.android.settings", # APP包名(需测试的APP包名)
"appActivity": ".Settings", # APP启动页Activity
"noReset": True, # 不重置APP数据(避免每次启动都重新授权)
"automationName": "UiAutomator2" # Android自动化引擎(必选)
}
# 2. 初始化驱动,连接Appium服务(默认端口4723)
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
# 设置隐式等待:查找元素时最多等10秒
driver.implicitly_wait(10)
try:
# 3. 定位元素并操作(以点击“WLAN”为例)
# 方式1:通过XPath定位(最通用)
wlan_element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((AppiumBy.XPATH, "//*[@text='WLAN']"))
)
wlan_element.click()
print("成功点击WLAN选项")
# 额外示例:返回上一页
driver.back()
time.sleep(1)
# 方式2:通过ID定位(更高效,需提前获取元素ID)
# network_element = driver.find_element(AppiumBy.ID, "com.android.settings:id/network_settings")
# network_element.click()
except NoSuchElementException:
print("错误:未找到WLAN元素")
except TimeoutException:
print("错误:查找WLAN元素超时")
except Exception as e:
print(f"测试异常:{str(e)}")
finally:
# 4. 关闭驱动,释放资源
driver.quit()
print("测试结束,已关闭驱动")
3. 关键知识点解释
- Desired Capabilities:是字典格式的配置项,核心参数必须准确,否则无法连接设备 / 启动 APP:
appPackage/appActivity:Android APP 的核心标识,可通过aapt dump badging 应用包名.apk命令获取;deviceName:通过adb devices命令查看设备列表即可获取;
- 元素定位:APP 自动化的核心是定位控件,常用方式:
定位方式 适用场景 示例 XPath 通用,无 ID 时优先使用 //*[@text='WLAN']ID 效率最高,优先使用 com.android.settings:id/xxxAccessibility ID iOS/Android 通用 driver.find_element(AppiumBy.ACCESSIBILITY_ID, "WLAN") - 等待机制:
- 隐式等待:全局生效,设置一次即可(如
driver.implicitly_wait(10)); - 显式等待:针对特定元素,更灵活(如示例中
WebDriverWait),推荐优先使用显式等待,避免元素未加载完成导致的报错。
- 隐式等待:全局生效,设置一次即可(如
4. 进阶技巧
- APP 安装与启动:如果需要自动化安装 APP,可在
desired_caps中添加"app": "/path/to/xxx.apk"(本地 APK 路径); - 多设备并行测试:使用
appium-python-client结合pytest-xdist实现多设备同时测试,提升效率; - 测试报告生成:用
pytest-html生成 HTML 报告,或allure生成更美观的可视化报告; - 手势操作:通过
TouchAction或ActionChains实现滑动、点击、长按等操作(如滑动页面找元素):python运行# 示例:从下往上滑动页面 driver.swipe(start_x=500, start_y=1500, end_x=500, end_y=500, duration=500) - 混合应用测试:如果 APP 包含 H5 页面,需切换到 WebView 上下文,才能定位 H5 元素。
总结
- 核心框架:Python 做 APP 自动化测试首选
Appium + Python,需先配置好 Android/iOS 环境和 Appium 服务; - 核心步骤:配置
Desired Capabilities→ 初始化驱动 → 定位元素 → 执行操作 → 异常处理 → 释放资源; - 关键技巧:优先用显式等待保证稳定性,元素定位优先选 ID(高效),其次用 XPath(通用),做好异常捕获避免脚本崩溃。
掌握这些基础后,你可以结合
pytest组织测试用例集,实现批量自动化测试,再配合 CI/CD 工具(如 Jenkins)可实现自动化测试流水线。标签:一般
- 上一篇:怎么使用AI提高软件开发效率
- 下一篇:Python爬虫有什么值得注意的地方



发表评论: