提问人:Dron22 提问时间:7/28/2023 最后编辑:Dron22 更新时间:7/28/2023 访问量:282
网页抓取时无法拦截 Playwright 中的请求/响应正文
Unable to intercept request/response body in Playwright while web-scraping
问:
有解析此页面的任务: https://privatleasing.volkswagen.se/valjmodell .我需要通过进入每个模型的页面并获取数据来获取模型和租赁价格。
第一个问题是这个网站在我的国家只能在VPN下运行。
我从尝试使用简单的工具开始,例如“requests”/“Beautifulsoup” - 不起作用,因为网站几乎在所有事情上都使用 JavaScript。
然后尝试找到隐藏的 API - 有一个获取 JSON 的 API,包括每个模型页面的链接列表。 以下是API的完整链接(数字正在变化): https://nosp-api.vwfs-se-nosp.vwfs.io/api/category?nocache=1690533980259
以下是检查器的屏幕截图: 包含所需数据的检查器屏幕截图 这些数据在开始时是有用的。我可以在检查器中看到此 JSON,但无法直接访问。尝试从“请求标头”传递所有标头 - 返回错误 403。
然后尝试使用Playwright,如本文所示: https://www.zenrows.com/blog/web-scraping-intercepting-xhr-requests#use-case-auctioncom 因此,我可以获取请求和响应的所有链接。我可以过滤它们以仅获取包含 JSON 的 JSON - 但没有屏幕截图中显示的此类 JSON。 我认为这都是因为 VPN 问题 - 我不确定 Playwright 中的 Chromium 浏览器是否加载了该页面。 此外,我还是抓取和剧作家的新手,所以无法理解是否有可能抓取该页面。
尽管 Playwright 我也尝试使用 Selenium,但再次面临 VPN 问题。试图让Selenium Chrome浏览器使用我的帐户,该帐户始终打开了VPN插件。这没有成功 - 起始页冻结,什么也没发生。
此外,我还尝试将代理服务器用于 Selenium 和 Playwright 变体。我使用免费服务器进行测试,因为该项目还没有那么严重,需要支付代理费用。无论如何,Selenium 和 Plywright 都能够加载页面(如果代理有效),但速度太慢了,以至于无法跳转到舞会页面并获取数据 - 我认为这个变体太不稳定了。
这是我的代码现在的样子:
from playwright.sync_api import sync_playwright
def test_json(response):
try:
print(response.json())
except:
pass
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.on("request", lambda request: test_json(request))
page.on("response", lambda response: test_json(response))
page.goto("https://privatleasing.volkswagen.se/valjmodell", wait_until='networkidle')
page.context.close()
browser.close()
如果这很重要,整个项目都是在 scrapy 框架中完成的,但通过这个网站,我现在在 scrapy 之外进行测试。
很高兴听到您对我做错了什么的建议,以及是否有可能解析这个网站?
答:
找到了解决方案 - 桌面 VPN 应用程序解决了这个问题。 现在,在使用我提到的代码时,所需的 JSON 出现在结果列表中。 希望这会对某人有所帮助)
评论