from __future__ import annotations from typing import TYPE_CHECKING import pytest from bs4 import BeautifulSoup from parsel import Selector from crawlee.crawlers._beautifulsoup._utils import html_to_text as html_to_text_beautifulsoup from crawlee.crawlers._parsel._utils import html_to_text as html_to_text_parsel if TYPE_CHECKING: from collections.abc import Callable _EXPECTED_TEXT = ( "Let's start with a simple text. \n" "The ships hung in the sky, much the way that bricks don't. \n" "These aren't the Droids you're looking for\n" "I'm sorry, Dave. I'm afraid I can't do that.\n" "I'm sorry, Dave. I'm afraid I can't do that.\n" 'A1\tA2\tA3\t\n' 'B1\tB2\tB3\tB 4\t\n' 'This is some text with inline elements and HTML entities (>bla<) \n' 'Test\n' 'a\n' 'few\n' 'line\n' 'breaks\n' 'Spaces in an inline text should be completely ignored. \n' 'But,\n' ' a pre-formatted\n' ' block should be kept\n' ' pre-formatted.\n' 'The Greatest Science Fiction Quotes Of All Time \n' "Don't know, I don't know such stuff. I just do eyes, ju-, ju-, just eyes... just genetic design, just eyes. You " 'Nexus, huh? I design your eyes.' ) _EXAMPLE_HTML = """
The ships hung in the sky, much the way that bricks don't.
| A1 | A2 | A3 | |
| B1 | B2 | B3 | B 4 |
This is some text with inline elements and HTML entities (>bla<)
But,
a pre-formatted
block should be kept
pre-formatted.
The Greatest Science Fiction Quotes Of All Time
Don't know, I don't know such stuff. I just do eyes, ju-, ju-, just eyes... just genetic design, just eyes. You Nexus, huh? I design your eyes.
""" @pytest.mark.parametrize('html_to_text', [html_to_text_parsel, html_to_text_beautifulsoup]) @pytest.mark.parametrize( ('source', 'expected_text'), [ pytest.param(_EXAMPLE_HTML, _EXPECTED_TEXT, id='Complex html'), (' Plain text node ', 'Plain text node'), (' \nPlain text node \n ', 'Plain text node'), ('Paragraph
A B C D E\n\nF G', 'A B C D E\n\nF G'), ( '
| Cell A1 | Cell A2 | Cell A3 |
| Cell B1 | Cell B2 |