Я хочу вернуть только 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
Ограничить типы ресурсов только XHR с драматургом ⇐ Python
Программы на Python
-
Anonymous
1730960022
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/1Ptug8zYS_SKggPNyC0IT4ttDfA.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"]}
Подробнее здесь: [url]https://stackoverflow.com/questions/71277753/restrict-resource-types-only-to-xhrs-with-playwright[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия