Как передать правило из configparser в BeatifulfulSoup? - PullRequest
0 голосов
/ 19 мая 2018

Существует метод, который обрабатывает суп:

def get_title(self):
    # print(self.get_page)
    # print(self.title_rule)
    # print(self.get_page.find(self.title_rule))
    title = self.get_page.find(self.title_rule).text
    return textwrap.fill(title, width=79)

Печать страницы self.get_page - все нормально:

@property
def get_page(self):
    page = requests.get(self.url)
    page.encoding = self.encode
    return BeautifulSoup(page.text, 'html.parser')

self.title_rule получает правило из конфигурации.INI:

$print(self.title_rule)
'h1', {'class': 'title'}

[pravda.ru]
title = 'h1', {'class': 'title'}

def get_rule(self):
    config = configparser.ConfigParser()
    config.read(path)
    title_rule = config.get(self.site_name, "title")
    return title_rule

Но когда я пытаюсь:

print(self.get_page.find(self.title_rule))
None

Если я пытаюсь:

print(self.get_page.find('h1', {'class': 'title'}))

или

rule = 'h1', {'class': 'title'}
print(self.get_page.find(rule))

все нормально!

Я думаю, это потому, что строка приходит из файла конфигурации.

, например: rule = "'h1', {'class': 'title'}", self.title_rule = "'h1', {'class': 'title'}"

Пожалуйста, помогите мне получить из конфигурации

self.title_rule = 'h1', {'class': 'title'}

без ("), не строка.

1 Ответ

0 голосов
/ 19 мая 2018

Проблема с этой строкой:

print(self.get_page.find(self.title_rule))

в том, что self.title_rule не был настроен, все, что вам кажется, это локальная переменная title_rule, в методе класса get_title_rule и закрытом классепеременная называется «заголовок».Поэтому я предлагаю вам использовать

print(self.get_page().find(self.get_title_rule()))

, также обратите внимание на скобки после get_page!

...