预渲染JavaScript¶在从其他请求中获取数据的网页上,复制包含所需数据的请求是首选方法。这项工作通常是值得的:结构化的、完整的数据,最少的解析时间和网络传输。 然而,有时很难重现某些请求。或者你可能需要一些没有请求可以提供给你的东西,比如网页的屏幕截图,就像在网页浏览器中看到的那样。 在这些情况下,使用 Splash JavaScript呈现服务,以及 scrapy-splash 实现无缝集成。 splash返回为html DOM 一个网页,这样你就可以用 selectors . 它通过 configuration 或 scripting. 如果您需要Splash提供的以外的东西,例如从python代码即时与DOM交互而不是使用以前编写的脚本,或者处理多个Web浏览器窗口,您可能需要 use a headless browser 相反。 使用无头浏览器¶A headless browser 是一种特殊的Web浏览器,它为自动化提供API。通过安装 asyncio reactor ,则可以集成 其中一个这样的库是 playwright-python (Python官方端口 playwright )。下面是一个简单的代码片段,用来说明它在Scrapy爬行器中的用法: import scrapy
from playwright.async_api import async_playwright
class PlaywrightSpider(scrapy.Spider):
name = "playwright"
start_urls = ["data:,"] # avoid using the default Scrapy downloader
async def parse(self, response):
async with async_playwright() as pw:
browser = await pw.chromium.launch()
page = await browser.new_page()
await page.goto("https:/example.org")
title = await page.title()
return {"title": title}
但是,使用 playwright-python 与上面的示例一样,直接绕过了大多数scrapy组件(中间件、dupefilter等)。我们建议您使用 scrapy-playwright 为了更好的整合。 |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-9-8 09:43 , Processed in 0.017854 second(s), 17 queries .