Ошибка при поиске разобранной веб-страницы с помощью python и beautifulsoup - PullRequest
0 голосов
/ 06 февраля 2012

Я захожу на сайт, делаю поисковый запрос и затем фильтрую результаты с Beautifulsoup, чтобы получить все термины в теге «b». Из результатов я хотел бы проверить, присутствует ли поисковый термин (Тестирование). Мой текущий код ниже. Проблема, с которой я сталкиваюсь, заключается в том, что даже когда есть результат и термин присутствует, я все равно получаю ответ, отсутствующий. Я напечатал отфильтрованный запрос и прочитал его, и результат определенно там, так что ошибка в поисковой части. Я думаю, что проблема в том, что в html слово «тестирование» само по себе не является таковым, поэтому его «Testing.example» или «Testing.test», и поэтому поиск не может найти его в окружении пробелов. Как мне найти слово / фразу в более длинном слове / фразе.

Мне нужно, чтобы «Тестирование» находилось в «example.Testing.example» или в «test.Testing.example»

Надеюсь, что это имеет смысл.

Спасибо

words = ["Testing"]
br.open ('http://www.example.com/browse.php?psec=2&search=%s' % words)
html = br.response().read()
soup = BeautifulSoup(html)
filtered = soup.findAll('b')

# print filtered

for word in words:
    if word in filtered:
        print "%s found." % word
    else:
        print "%s not found." % word

Редактировать

[<b><a title="Unknown">---</a></b>, <b>Welcome Back<br /><a href="/user/"><
span style="color:#0080FF;"></span></a>!<br /></b>, <b><span class="smallfo
nt"><a href="/messages.php?action=viewmailbox"><img height="14px" style="border:
none" alt="inbox" title="inbox (no new messages)" src="/pic/pn_inbox.gif" /></a>
59 (0 New)</span></b>, <b><span class="smallfont">&nbsp;&nbsp;<a href="/message
s.php?action=viewmailbox&amp;box=-1"><img height="14px" style="border:none" alt=
"sentbox" title="sentbox" src="/pic/pn_sentbox.gif" /></a> 37</span></b>, <b>Sho
w all</b>, <b><< Prev</b>, <b>Next >></b>, <b>1&nbsp;-&nbsp;7</b>, **<b>The.Testing
.example.T3Z6.L</b>**, <b><span style="color:#FF5500;">dgHn</span
></b>, <b><a href="/details.php?id=15829&amp;hit=1&amp;filelist=1">1</a></b>, <b
><a href="/details.php?id=15829&amp;hit=1&amp;=1"><font>30</font></a></
b>, <b><a href="/details.php?id=15829&amp;hit=1&amp;todlers=1">1</a></b>,

Когда я печатаю фильтрованный, я получаю вышеуказанный результат Это немного дольше, но вы поняли. На пяти строчках снизу в ** s вы видите результат, который должен иметь положительный результат, но это не так.

Ответы [ 3 ]

1 голос
/ 06 февраля 2012

Полагаю, вам нужно что-то похожее на следующее

words = ["Testing"]
br.open ('http://www.example.com/browse.php?psec=2&search=%s' % words)
html = br.response().read()
soup = BeautifulSoup(html)
filtered = soup.findAll('b')
"""element.contents[0] gives you the  first element inside the <b> tags
If you want some other part of inside the b tag see  
BeatifulSoup documentation at the line below """
filteredcontents = [element.contents[0] for element in filtered]

for word in words:
    if any(word in filteredcontent for filteredcontent in filteredcontents):
        print "%s found." % word
    else:
        print "%s not found." % word

Доступна документация BeatifulSoup здесь

0 голосов
/ 06 февраля 2012
filtered = soup.findAll('b') 

даст вам результаты, такие как [one, two].

Вам нужно сравнить содержимое отфильтрованного со словами

Вы можете попробовать что-то вроде:

soup.findAll(text=words)
0 голосов
/ 06 февраля 2012

Предупреждающий лектор: я не в деталях BeautifulSoup.

filtered - это список b элементов.Вам не хватает уровня.Попробуйте это:

for word in words:
    for b_elt in filtered:
        if word in b_elt: # or word in b_elt.text or suchlike
            print "%s found." % word
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...