Использование встроенного селектора scrapy для локальных файлов HTML - PullRequest
1 голос
/ 21 февраля 2020

У меня есть несколько локальных HTML файлов, и мне нужно извлечь из него некоторые элементы. Я привык писать Scrapy и извлекать элементы, используя встроенные селекторы с xpath и css и .extract() и .extract_first().

. Есть ли библиотека, которая может сделать это?

Я проверил BeautifulSoup и lxml, но их синтаксис отличается от Scrapy.

Например, я хотел бы сделать что-то вроде этого:

sample_file = "../raw_html_text/sample.html"

with open(sample_file, 'r', encoding='utf-8-sig', newline='') as f:
    page = f.read()
    html_object = # convert string to html or something
    print(html_object.css("h2 ::text").extract_first())

Ответы [ 3 ]

1 голос
/ 22 февраля 2020

Я обычно импортирую селекторы скрапа в другие проекты, так как они мне очень нравятся. Просто импортируйте класс Selector и передайте ему строку, и она будет работать так же, как в Scrapy.

from scrapy import Selector

sample_file = "../raw_html_text/sample.html"

with open(sample_file, 'r', encoding='utf-8-sig', newline='') as f:
    page = f.read()
    data = Selector(text=str(page))
    title = data.css('h2::text').get()
    # used to be data.css('h2::text').extract_first()
1 голос
/ 21 февраля 2020

Я знаю, что вы специально упомянули BeautifulSoup с синтаксисом, отличным от scrapy, но это определенно подходящий инструмент для этой работы, и у него действительно есть метод для передачи селектора CSS.

from bs4 import BeautifulSoup

sample_file = "../raw_html_text/sample.html"

with open(sample_file, 'r', encoding='utf-8-sig', newline='') as f:
    page = f.read()
    html_object = BeautifulSoup(page)
    print(html_object.select("h2")[0].text)
    # or print(html_object.select("div.container")[0].text) for div class="container", etc.

FWIW, доступ к выходу также очень прост. Метод select возвращает список совпадающих BeautifulSoup объектов. Каждый объект имеет атрибут .text.

0 голосов
/ 17 апреля 2020

Используйте Parsel , это то, что Scrapy использует внизу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...