Проблема с разбором html для метатега (bs4) - PullRequest
0 голосов
/ 31 января 2020

Я анализирую htmls структур из Protein Data Bank, и возникла одна проблема: одна из вещей, которую я хочу извлечь из htmls, - это метатег. Это пример этого тега - важно то, что «содержимое» отличается в разных hmlts (поэтому я не могу разобрать точный текст в содержимом - вот почему я поместил блаблах-текст здесь):

<meta name="author" content="blahblah1, blahblah2, blahblah3">

Я пытаюсь решить ее с помощью кода:

with open(datafile) as f:
    soup = BeautifulSoup("".join(f.readlines()), "html.parser")
    tag = soup.find("meta", name="author").next_sibling
    print(tag.contents)    

Но это возвращает меня к ошибке:

TypeError: find () получил несколько значений для аргумента 'name'

Я также пробовал код с find_all, произошла та же ошибка. Пожалуйста, какие-либо предложения?

1 Ответ

2 голосов
/ 31 января 2020

Этот код работает с вашим файлом данных:

with open(datafile) as f:
    soup = BeautifulSoup("".join(f.readlines()), "html.parser")
    tag = soup.find("meta", attrs={'name': "author"})
    print(tag.attrs['content'])

Или вы можете использовать этот код, если файл данных:

<meta name="author" content="content1">sdsd</meta>
<meta name="author" content="content2">sdsd</meta>

scripy.py:

from bs4 import BeautifulSoup
datafile='1.txt'
with open(datafile) as f:
    soup = BeautifulSoup("".join(f.readlines()), "html.parser")
    tag = soup.find("meta", attrs={'name': "author"}).findNext('meta')
    print(tag.attrs['content'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...