Ограничить типы ресурсов только XHR с драматургомPython

Программы на Python
Ответить
Anonymous
 Ограничить типы ресурсов только XHR с драматургом

Сообщение Anonymous »

Я хочу вернуть только xhr из Scrapy_playwright, используя playwright_page_event_handlers. Проверив файл jsonlines, я обнаружил, что он не был успешно ограничен только xhrs.
Я знаю, что могу фильтровать перед записью файла, однако я хочу сэкономить время, затрачиваемое на это. требуется, чтобы захватить эти ресурсы, а не фильтровать все после.
Как я могу ограничить типы ресурсов только xhr?
Вот что Я пробовал:
from playwright.async_api import Response as PlaywrightResponse, BrowserContext
from scrapy_playwright.page import PageCoroutine
from scrapy import Spider, Request
import jsonlines

class EventSpider(Spider):
name = "event"

def start_requests(self):
yield Request(
url="http://quotes.toscrape.com/scroll",
cookies={"foo": "bar", "asdf": "qwerty"},
meta=dict(
playwright=True,
playwright_page_coroutines = [
PageCoroutine("wait_for_selector", "div.quote"),
PageCoroutine("evaluate", "window.scrollBy(0, document.body.scrollHeight)"),
PageCoroutine("wait_for_selector", "div.quote:nth-child(11)"), # 10 per page
],
playwright_page_event_handlers={
"response": "handle_response",
"context": self.configure_context
},
),
)
async def configure_context(name: str, context: BrowserContext) -> None:
def handle_route(route):
if ("quotes" in route.request.post_data):
route.fulfill()
else:
route.continue_()
await context.route("/api/**", handle_route)

async def handle_response(self, response: PlaywrightResponse) -> None:
jl_file = "test.jl"
data = {response.request.resource_type:[response.request.url]}
with jsonlines.open(jl_file, mode='a') as writer:
writer.write(data)

def parse(self, response):
return {"url": response.url}

Выдает следующий результат:
{"document": ["http://quotes.toscrape.com/scroll"]}
{"stylesheet": ["http://quotes.toscrape.com/static/bootstrap.min.css"]}
{"stylesheet": ["http://quotes.toscrape.com/static/main.css"]}
{"script": ["http://quotes.toscrape.com/static/jquery.js"]}
{"stylesheet": ["https://fonts.googleapis.com/css?family=Raleway:400,700"]}
{"font": ["https://fonts.gstatic.com/s/raleway/v26 ... tDfA.woff2"]}
{"xhr": ["http://quotes.toscrape.com/api/quotes?page=1"]}
{"xhr": ["http://quotes.toscrape.com/api/quotes?page=2"]}
{"xhr": ["http://quotes.toscrape.com/api/quotes?page=3"]}

Ожидаемый результат:
{"xhr": ["http://quotes.toscrape.com/api/quotes?page=1"]}
{"xhr": ["http://quotes.toscrape.com/api/quotes?page=2"]}
{"xhr": ["http://quotes.toscrape.com/api/quotes?page=3"]}


Подробнее здесь: https://stackoverflow.com/questions/712 ... playwright
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»