Python BeautifulSoup - разные результаты с find и findAll - PullRequest
2 голосов
/ 22 марта 2012

Я пытаюсь разобрать текст, встроенный в HTML, используя BeautifulSoup, используя атрибут «text».Играя с "find" и "findAll", я замечаю что-то странное и не могу понять, почему он так себя ведет ...

import re
import BeautifulSoup

doc = "<html><head><title>Page title</title><title>Author name</title></head>"
soup = BeautifulSoup(doc)

# find test
test1 = soup1.find('title',text=re.compile("Page")) 
print test1 # Returns "Page title"

# findAll test
test2 = soup1.findAll('title',text=re.compile("Page")) 
print test2 # Returns "[<title>Page title</title>, <title>Author name</title>]"

Во втором тесте парсер не должен возвращатьте же результаты, что и в первом примере?Второй тест должен возвращать все теги 'title', текст которых содержит "Page", и все же он также возвращает второй тег title.

Это ожидается или я что-то упустил?

Ответы [ 3 ]

0 голосов
/ 22 марта 2012

Работает как положено на BeautifulSoup 3.2.0:

>>> soup.find('title',text=re.compile("Page")) 
u'Page title'
>>> soup.findAll('title',text=re.compile("Page")) 
[u'Page title']
0 голосов
/ 27 октября 2016

Я получил результаты для BeautifulSoup версии 4.7 в python3.7

>>> soup.find('title', text=re.compile('Page'))
    <title>Page title</title>
>>> soup.findAll('title', text=re.compile('Page'))
   [<title>Page title</title>]
0 голосов
/ 22 марта 2012

Документация предполагает, что аргументы text и name являются взаимоисключающими.Но, как говорится, если указано text, name игнорируется, в вашем случае, похоже, происходит обратное.

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