您现在的位置是:网站首页> PY&Rust
Python爬虫篇
- PY&Rust
- 2025-10-04
- 1133人已阅读
Python爬虫篇
使用Scrapy 爬取javascript生成的页面内容的例子
playwright安装方式及验证
Playwright 是一个强大的自动化测试工具,支持多种浏览器和编程语言。以下是不同环境下的安装方式:
1. Node.js (JavaScript/TypeScript) 环境
首先确保已安装 Node.js (v16 及以上版本),然后通过 npm 安装:
bash
# 作为项目依赖安装
npm install playwright --save-dev
# 安装完成后,Playwright 会自动下载支持的浏览器
# 如需手动安装或更新浏览器
npx playwright install
2. Python 环境
确保已安装 Python (3.8 及以上版本),通过 pip 安装:
bash
# 安装 Playwright 包
pip install playwright
# 安装所需的浏览器(这一步很重要,否则无法运行)
playwright install
3. 特定浏览器安装
如果只需要特定浏览器,可以指定安装:
bash
# Node.js 环境
npx playwright install chromium # 仅安装 Chromium
npx playwright install firefox webkit # 安装 Firefox 和 WebKit
# Python 环境
playwright install chromium
playwright install firefox webkit
验证安装
安装完成后,可以通过简单代码验证:
Node.js 示例:
javascript
运行
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.title());
await browser.close();
})();
Python 示例:
python
运行
from playwright.sync import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://example.com")
print(page.title())
browser.close()
如果运行上述代码能正常输出页面标题,说明安装成功。
在命令行窗口使用如下语法格式进行脚本录制
npx playwright codegen [options] [url]
options参数:
-o, --output :保存生成脚本
--target :生成的脚本语言,可以设置javascript, test, python, python-async和csharp,默认为python。
-b, --browser :要使用的浏览器,可以选择cr, chromium, ff, firefox, wk和webkit,默认chromium。
--channel :chromium版本,比如chrome, chrome-beta, msedge-dev等,
--color-scheme :模拟器的颜色主题,可选择light 或者 dark样式。
--device :模拟的设备,比如iPhone 11。
--ignore-https-errors:访问https地址忽略安全证书验证异常
--save-storage :保存上下文状态,用于保存cookies 和localStorage,可用它来实现重用。例如playwright codegen --save-storage=auth.json
--load-storage :加载--save-storage 保存的数据,重用认证数据。
--proxy-server :指定代理服务器
--timezone : 指定时区
--geolocation :指定地理位置坐标
--lang :指定语言/地区,比如中国大陆:zh-CN
--timeout :超时时间,定位毫秒,默认10000ms
--user-agent :用户代理
--viewport-size :浏览器窗口大小
-h, --help :查看帮助信息
示例
playwright codegen -o test_play1.py --target python -b chromium https://127.0.0.1:8180/login --ignore-https-errors
AI辅助学习爬虫
####【豆包】
Q:playwright如何选择页面元素
A:。。。
Q:playwright如何选择多个class修饰的页面元素
A:。。。
####【豆包】
Q:playwright中验证码解决
A:
1.人工干预(适合少量测试)
在自动化流程中暂停,由人工输入验证码后继续执行:
from playwright.sync import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False) # 非无头模式,方便人工操作
page = browser.new_page()
page.goto("https://example.com/login")
# 填写账号密码
page.fill("#username", "user")
page.fill("#password", "pass")
# 暂停,等待人工输入验证码
print("请在浏览器中输入验证码,完成后按回车继续...")
input() # 等待用户输入
# 验证码输入完成后,继续点击登录
page.click("#submit")
browser.close()
2.简单图片验证码识别(OCR)
对于无干扰的简单验证码,可以使用 OCR 工具(如 Tesseract)识别:
步骤:
安装 Tesseract:sudo apt install tesseract-ocr(Linux)或下载安装包(Windows)
安装 Python 库:pip install pytesseract pillow
实现示例:
python
运行
from playwright.sync import sync_playwright
import pytesseract
from PIL import Image
import io
def recognize_captcha(page, selector):
# 截取验证码图片
captcha_element = page.locator(selector)
image_bytes = captcha_element.screenshot()
# 用 Tesseract 识别
image = Image.open(io.BytesIO(image_bytes))
return pytesseract.image_to_string(image).strip()
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://example.com/login")
# 识别并填写验证码
captcha_code = recognize_captcha(page, "#captcha-image")
page.fill("#captcha-input", captcha_code)
browser.close()
注意:这种方法对复杂验证码(有干扰线、扭曲、模糊)识别率极低。
3.对接第三方验证码识别服务
对于复杂验证码,可以使用付费的第三方打码平台(如超级鹰、云打码等),这些平台通过人工或 AI 识别验证码:
实现思路:
注册打码平台账号,获取 API 密钥
截取验证码图片并上传到平台
获取识别结果并填入表单
示例(以超级鹰为例):
python
运行
from playwright.sync import sync_playwright
import requests
import base64
# 超级鹰 API 配置
CHAOJIYING_USERNAME = "your_username"
CHAOJIYING_PASSWORD = "your_password"
CHAOJIYING_SOFT_ID = 123456 # 替换为你的软件ID
def recognize_captcha(image_bytes):
# 上传图片到超级鹰
b64_image = base64.b64encode(image_bytes).decode()
data = {
"user": CHAOJIYING_USERNAME,
"pass2": CHAOJIYING_PASSWORD,
"softid": CHAOJIYING_SOFT_ID,
"codetype": 1004, # 验证码类型(1004为普通数字字母)
"file_base64": b64_image
}
response = requests.post("http://upload.chaojiying.net/Upload/Processing.php", data=data)
result = response.json()
return result["pic_str"] # 识别结果
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://example.com/login")
# 截取验证码并识别
captcha_bytes = page.locator("#captcha").screenshot()
captcha_code = recognize_captcha(captcha_bytes)
# 填写验证码
page.fill("#captcha-input", captcha_code)
browser.close()
4.滑块验证码处理
对于滑块验证码(如拖动滑块拼合图片),可以通过模拟鼠标拖动实现:
python
运行
from playwright.sync import sync_playwright
import time
def solve_slider(page, slider_selector, target_selector):
# 获取滑块和目标位置
slider = page.locator(slider_selector)
target = page.locator(target_selector)
# 获取位置信息
slider_bbox = slider.bounding_box()
target_bbox = target.bounding_box()
# 计算需要滑动的距离
distance = target_bbox["x"] - slider_bbox["x"]
# 模拟拖动(带加速度的滑动更像人类操作)
slider.hover()
page.mouse.down()
page.mouse.move(slider_bbox["x"] + distance/3, slider_bbox["y"], steps=10)
time.sleep(0.2)
page.mouse.move(slider_bbox["x"] + distance*2/3, slider_bbox["y"], steps=15)
time.sleep(0.1)
page.mouse.move(slider_bbox["x"] + distance, slider_bbox["y"], steps=20)
page.mouse.up()
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://example.com/slider-captcha")
# 解决滑块验证码
solve_slider(page, "#slider", "#target")
browser.close()
注意:不同网站的滑块验证可能有轨迹检测,需要调整滑动参数(速度、加速度、停顿等)
Python编写爬虫主要用哪些包
Python编写爬虫时,主要使用以下几个包:
1. Requests:用于发送HTTP请求并获取响应。可以用它来获取网页内容或者API数据。
2. Beautiful Soup:用于解析HTML或XML文档,提取出需要的信息。它可以帮助你从网页中提取出特定的标签、文本或链接。
3. Scrapy:一个高级的Python爬虫框架,提供了强大的爬取和数据提取功能。它支持异步处理、分布式爬取和数据管道等特性。
4. Selenium:用于自动化测试和模拟浏览器行为的工具。它可以模拟用户在浏览器中的操作,如点击、填写表单等,对于需要执行JavaScript的网页爬取非常有用。
5. PyQuery:类似于jQuery的库,用于解析HTML文档并提取出需要的信息。它提供了简洁的语法和强大的选择器功能。
6. Scrapy-Redis:基于Scrapy框架的分布式爬虫扩展,使用Redis作为分布式队列,可以实现多台机器同时进行爬取。
7. Splash:一个JavaScript渲染服务,可以用于处理动态网页。它可以将JavaScript渲染后的页面返回给爬虫,从而能够获取到完整的页面内容。
除了以上列举的包,还有其他一些常用的辅助库,如pandas(数据处理)、numpy(数值计算)、scikit-learn(机器学习)等,根据具体需求可以灵活选用。
使用Scrapy 爬取javascript生成的页面内容的例子
当使用Scrapy爬取JavaScript生成的页面内容时,可以借助于Splash来执行JavaScript并获取完整的渲染结果。以下是一个使用Scrapy和Splash的示例代码:
import scrapy
from scrapy_splash import SplashRequest
class MySpider(scrapy.Spider):
name = 'javascript_spider'
def start_requests(self):
# 使用SplashRequest发送带有JavaScript的请求
yield SplashRequest(url='http://example.com', callback=self.parse)
def parse(self, response):
# 在这里可以使用XPath或CSS选择器提取JavaScript渲染后的页面内容
title = response.xpath('//title/text()').get()
print(title)
上述代码中,我们创建了一个名为javascript_spider的Spider,并在start_requests方法中使用SplashRequest发送请求。SplashRequest会将请求发送给Splash服务,并执行JavaScript渲染,然后返回渲染后的页面内容。在parse方法中,我们可以使用XPath或CSS选择器提取需要的数据。
注意,为了使用Splash,你需要安装scrapy-splash扩展,并在Scrapy的配置中启用它。你还需要启动Splash服务,并将其与Scrapy进行集成。可以参考Scrapy和Splash的文档以获取更详细的配置和使用说明。
它有适合python和nodejs的版本
Python:
# 可替换为 'firefox' 或 'webkit'
browser = p.chromium.launch(headless=False) # headless=False 显示浏览器界面
NodeJS:
Playwright 会下载自带的浏览器版本(Chromium、Firefox、WebKit),但你也可以用本地安装的浏览器路径来启动
//指定本地的chrome
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({
headless: false, // 显示浏览器界面
executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe' // 本地 Chrome 路径
});
上一篇:Python开源实用库与软件收集