Scrapy - выскабливание скрытых элементов - PullRequest
0 голосов
/ 25 января 2019

Я думаю, что я хочу спросить, возможно ли обойти sql: hide (https://docs.microsoft.com/en-us/sql/relational-databases/sqlxml-annotated-xsd-schemas-using/hiding-elements-and-attributes-by-using-sql-hide?view=sql-server-2017),, но я описал мою настоящую проблему ниже на случай, если я ошибаюсь:

I 'я пытаюсь очистить URL-адреса "foo" с веб-сайта с DOM, подобным следующему:

<html>
    <body>
        <tbody>
            <tr>
                <a href="foo1">...</a>
                <a href="foo2">...</a>
            </tr>
        </tbody>
        <table>
            <tbody>
                <tr>
                    <a href="bar1">...</a>
                </tr>
                <tr>
                    <a href="bar2">...</a>
                </tr>
            </tbody>
        </table>
    </body>
</html>

Всякий раз, когда я пытаюсь print(response.css('a')) или, что эквивалентно, print(response.xpath('//a')), я вижу URL-адреса "foo",но не URL "bar". Кроме того, используя XPath, я могу получить доступ к таблице, но print(response.xpath('//table//*')) и print(response.xpath('//table//a')) оба выводят [].

Возможно ли, что элементы таблицы имеюткак-то скрыт от Scrapy? Как можно решить эту проблему?

Заранее спасибо. Это в основном для интереса, так как URL в любом случае имеют предсказуемую закономерность.

1 Ответ

0 голосов
/ 25 января 2019

Я знаю, что это просто дикое предположение, но вы можете попробовать

//a[starts-with(@href,'foo')]/text()

Это должно дать вам текстовые значения всех тегов a, имеющих атрибут href, значение которых начинается со строки 'foo'.


Но возможно, что некоторые части результирующего XML / HTML будут загружены JavaScript позже, что объяснит ваши трудности с поиском определенных элементов.

...