首页 > 其他分享 >playwright网络爬虫实战案例分享

playwright网络爬虫实战案例分享

时间:2023-04-27 11:38:19浏览次数:37  
标签:实战 playwright handle url request 爬虫 response page


不寝听金钥,因风想玉珂。

大家好,我是Python进阶者。

一、前言

前几天在Python白银交流群【HugoLB】分享了一个playwright网络爬虫利器,如下图所示。

playwright网络爬虫实战案例分享_python

感觉挺有意思,上手难度也不算太大,这里整理一份小教程分享给大家,后面遇到常规爬不动的网站,不妨试试看这个利器,兴许会事半功倍哦!

二、实现过程

这里使用新发地网站做一个简单的示例,新发地网站最开始的时候是get请求,去年的时候开始使用post请求方式,网页发生了变化,其实你正常使用网络爬虫的常规方式,也是可以获取到数据的,而且效率也很高,这里我是为了给大家做一个playwright网络爬虫示例,拿这个网站小试下牛刀。言归正传,一起来看看吧!

新发地网站的首页如下图所示:


playwright网络爬虫实战案例分享_ajax_02

进入网页之后,可以看到网页的url,然后点击右侧的查看更多,即可进入到详情页,如下图所示:


playwright网络爬虫实战案例分享_编程语言_03

此时可以看得到更多的数据量了,这里只是用一两个页面做一个示例,更多的页面等大家自己去挖掘。

启动浏览器抓包,点击网页的下一页,可以看到响应数据如下图所示:


playwright网络爬虫实战案例分享_人工智能_04

此时的请求参数如下图所示:


playwright网络爬虫实战案例分享_人工智能_05

依次再点击下一页,可以看到Request URL是不变的,变化的是Payload里边的current参数。


playwright网络爬虫实战案例分享_人工智能_06

此时的请求参数如下图所示:


playwright网络爬虫实战案例分享_大数据_07

那么到这里的话,网页变化的规律其实已经很明显了,接下来我们只需要上playwright代码就行了,代码框架是固定的,只需要更改两个url即可,第一个是主页的url,第二个就是响应数据的response.url,具体的代码如下所示:

from playwright.sync_api import Playwright, sync_playwright
import datetime
from pprint import pprint
import traceback
import logging
from tqdm import tqdm
import json

# pip install playwright,然后终端 playwright install
"""
先用playwright写一个普通的登入网站代码,然后page.goto前面加上
page.on("request", lambda request: handle(request=request, response=None))
page.on("response", lambda response: handle(response=response, request=None))
然后可以写一个handle自定义函数,args为response和request,然后后面想怎么处理数据都可以
"""
# setup logging
logging.basicConfig(format='%(asctime)s | %(levelname)s : %(message)s', level=logging.INFO)


def handle_json(json):
    # process our json data
    # print(json)
    for i in range(20):
        data_list = json['list'][i]
        # print(data_list)
        id = data_list['id']
        prodName = data_list['prodName']
        prodCat = data_list['prodCat']
        place = data_list['place']
        print(id, prodName, prodCat, place)


def handle(request, response):
    if response is not None:
        # response url 是网站请求数据的url
        if response.url == 'http://www.xinfadi.com.cn/getPriceData.html':
            handle_json(response.json())


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context(ignore_https_errors=True)

    # Open new page
    page = context.new_page()

    page.on("request", lambda request: handle(request=request, response=None))
    page.on("response", lambda response: handle(response=response, request=None))
    # url是网页加载的URL
    url = 'http://www.xinfadi.com.cn/index.html'
    page.goto(url)
    # 然后之前看到有说道网站动态加载,拖动的问题。playwright可以直接用page.mouse.wheel(0, 300)解决
    page.wait_for_timeout(50000)
    # ---------------------
    context.close()
    page.close()
    browser.close()


with sync_playwright() as playwright:
    run(playwright)

运行之后的结果如下所示:


playwright网络爬虫实战案例分享_编程语言_08

可以看到数据已经成功拿下了。在handle_json()这个函数里边,你可以针对获取到的数据做进一步的处理,如提取,保存等,也可以直接打印出来看效果,看你自己的需求了。

如果有遇到问题,随时联系我解决,欢迎加入我的Python学习交流群。


playwright网络爬虫实战案例分享_python_09

三、总结

大家好,我是Python进阶者。这篇文章主要分享了一个playwright网络爬虫实战案例教程,文中针对该问题给出了具体的解析和代码实现。


标签:实战,playwright,handle,url,request,爬虫,response,page
From: https://blog.51cto.com/u_13389043/6230091

相关文章

  • c语言和python语言写爬虫哪个更好 ?
    c语言和python语言写脚本那个更好?这取决于具体的应用场景和需求。C语言是一种高效、灵活的编程语言,适合于底层系统开发、操作系统、嵌入式开发等领域。C语言可以直接操作内存,因此可以更好地控制程序的性能和资源利用。Python语言则是一种高级编程语言,具有简洁、易读、易写等特点......
  • python+playwright 学习-58 Jenkins上使用 Pipeline 运行 playwright 自动化脚本
    前言Dockerfile.focal可用于在Docker环境中运行Playwright脚本。这些镜像包括在Docker容器中运行浏览器所需的所有依赖项,还包括浏览器本身。playwright在linux系统上目前只支持Ubuntu系统的部分版本,centos和debian系统上是没法运行的。jenkins环境准备需安装2个跟d......
  • 应用scrapy爬虫框架
    Scrapy是一个基于Python的开源网络爬虫框架,它可以帮助我们快速、高效地抓取网页数据,并支持数据的自动化处理、存储和导出。Scrapy提供了丰富的扩展机制,可以轻松地实现各种自定义需求。Scrapy的基本使用流程:1、安装Scrapy框架2、创建一个Scrapy爬虫项目3、编写爬虫代码,定义要抓......
  • 最容易上手的爬虫项目
    今天和大家分享一个爬取项目,那就是爬取自己博客的项目。1、确定爬取的目标开始之前我们需要确定一个爬取的目标,从我自己博客的首页进入。在这个例子里面我们要写一个爬虫将我的的文章列表拉出来,保存在一个JSON的文件里面。2、“种子”的分析,生成爬虫入口在谷歌浏览器中,打开开......
  • python+playwright 学习-57 svg 元素拖拽
    前言SVG英文全称为ScalablevectorGraphics,意思为可缩放的矢量图,这种元素比较特殊,需要通过​name​()函数来进行定位。本篇讲下关于svg元素的拖拽相关操作。拖拽svg元素如图所示,svg下的circle元素是可以拖动的比如往右拖动100个像素,那么cx的值由原来的cx="100"变成......
  • Kotlin实战基础 - 设置点击事件、Activity跳转、传值
    基础过度Kotlin基础入门-变量、方法、对象、继承、接口Kotlin实战基础-设置点击事件、Activity跳转、传值Kotlin实战基础-Activity、Fragment传递参数尚未完整,遇缺再补-点击事件Activity跳转Activity跳转+Intent传值点击事件点击事件是基础功......
  • Django4全栈进阶之路19 项目实战(用户管理):user_delete.html用户删除画面设计
    1、模块:<tbody>{%foruserinuser_list%}<tr><td>{{user.username}}</td><td>{{user.email}}</td>......
  • 深度学习--LSTM网络、使用方法、实战情感分类问题
    深度学习--LSTM网络、使用方法、实战情感分类问题1.LSTM基础长短期记忆网络(LongShort-TermMemory,简称LSTM),是RNN的一种,为了解决RNN存在长期依赖问题而设计出来的。LSTM的基本结构:2.LSTM的具体说明LSTM与RNN的结构相比,在参数更新的过程中,增加了三个门,由左到右分别是遗忘门(也......
  • Django4全栈进阶之路18 项目实战:登录模块设计
    1、编写函数视图,判定用户名密码,验证通过进入home主页,不通过返回登录页面deflogin_view(request):ifrequest.method=='POST':username=request.POST.get('username')password=request.POST.get('password')print(username)......
  • Python爬虫基础之三
    Python爬虫基础包括HTTP协议、HTML、CSS和JavaScript语言基础、requests库的使用、BeautifulSoup库的使用、xpath和正则表达式的使用等。此外,还应该了解反爬虫机制和爬虫的一些常见问题及解决方法。上一篇文章讲解了有关条件判断语句、循环语句、元组、字典等相关知识,本节将围绕......