您现在的位置是:网站首页> PY&Rust

Python爬虫篇

  • PY&Rust
  • 2025-10-04
  • 1133人已阅读
摘要

Python爬虫篇

1.jpg


playwright的视频教程


playwright介绍

playwright安装方式及验证

在命令行窗口使用如下语法格式进行脚本录制

AI辅助学习爬虫

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的文档以获取更详细的配置和使用说明。


playwright介绍

它有适合python和nodejs的版本

点击查看之前收集

官方API文档


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 路径

  });













Top