回复“ 资源 ”即可获赠Python学习资料
大家好,我是皮皮。
一、前言前几天在Python交流白银群【空翼】问了一道Python
网络爬虫的问题,如下图所示。
二、实现过程这里【HugoLB】给了一个思路,用playwright
库来处理,直接读json
返回值。
这里给出了playwright
的安装过程,如下图所示:
后来【HugoLB】给出了一份详细的代码,代码如下:
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./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./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】等人参与学习交流。