前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分享一个playwright网络爬虫实战教程

分享一个playwright网络爬虫实战教程

作者头像
前端皮皮
发布2022-08-17 19:23:34
1.8K0
发布2022-08-17 19:23:34
举报
文章被收录于专栏:前端进阶学习交流

大家好,我是皮皮。

一、前言

前几天在Python交流白银群【空翼】问了一道Python网络爬虫的问题,如下图所示。

二、实现过程

这里【HugoLB】给了一个思路,用playwright库来处理,直接读json返回值。

这里给出了playwright的安装过程,如下图所示:

后来【HugoLB】给出了一份详细的代码,代码如下:

代码语言:javascript
复制
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)


def handle(request, response):
    if response is not None:
        # response url 是网站请求数据的url
        if response.url == 'http://bmfw.www.gov.cn/bjww/interface/interfaceJson':
            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://bmfw.www.gov.cn/yqfxdjcx/risk.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过滤请求的一个原理,本是用来规律掉不想加载的内容,但是稍微改一下就可以获取所有网站请求返回来的数据。

一般来说,只需要更改这两个url就可以了。url是网页加载的URL,一般就是主页的链接,response url是网站请求数据的url

还有上面一个handle(json),可以在里面处理数据,然后写入csv/数据库,也可以加上async,如果数据多的话。这个我们后面专门再写一个文章,加强对playwright库的理解。

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个使用playwright库来处理网络爬虫的问题,文中针对该问题给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【空翼】提问,感谢【HugoLB】、【瑜亮老师】、【手中的流沙】、【月神】、【flag != flag】给出的思路和代码解析,感谢【此类生物】、【dcpeng】等人参与学习交流。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python共享之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、实现过程
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档