Очистить промежуток с помощью BeautifulSoup

Я пытался очистить тег "span" с помощью BeautifulSoup. вот мой код..

import urllib
from bs4 import BeautifulSoup
url="someurl"
res=urllib.urlopen(url)
html=res.read()
soup=BeautifulSoup(html,"html.parser")
soup.findAll("span")

Но когда я делаю это, для некоторых конкретных веб-страниц. это не перечисляет все промежутки. Это просто показывает ограниченное нет. пролетов. но, когда я делаю

soup.prettify()

Он содержит все пролеты. В чем может быть причина? Я что-то упускаю? Также некоторые ответы, которые я нашел, заключались в использовании безголовых браузеров, таких как "htmlunit". но я не уверен, что именно они? Могу ли я интегрировать их в свой проект Django?

суп.prettify дает https://drive.google.com/file/d/0BxhTzDujWhPVTzdIS2VWd1pZcHM/view?usp=sharing

ожидаемый выходной сигнал soup.findAll("span")

list of all the spans

вывод я получаю

[<span class="ssc-ftpl ssc_ga_tag" data-gaa="Opened" data-gac="Footer" data-gal="Responsible Gambling" tabindex="0"> Responsible Gambling</span>, <span class="ssc-ftpl ssc_ga_tag" data-gaa="Opened" data-gac="Footer" data-gal="About Betfair" tabindex="0"> About Betfair</span>, <span class="ssc-ftpl ssc-ftls " tabindex="0">English - UK</span>, <span class="ssc-ftpl" tabindex="0">\xa9 \xae</span>]

2 ответа

В конце концов выяснили, что решение было связано с проблемой "html.parser" по умолчанию, с которой не удалось справиться. Используйте "html5lib" вместо этого для разбора. и получить желаемые результаты.

soup=BeautifulSoup(html,"html5lib")
soup.findAll("span")

Парсер html5lib анализирует страницу точно так же, как браузер.

Может быть, вы пытаетесь очистить другую страницу, но у меня не было проблем с очисткой этого сайта. Вот мой код:

url='https://www.betfair.com/sport/football'
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html)

test = soup.find_all('span')
for span in test:
    print(span)

Это привело к большому списку пролетов, включая линии / партитуры, что, как я полагаю, вас заинтересовало:

<span class="ssc-lkh"></span>
<span>Join Now</span>
<span class="new flag-en"></span>
<span class="new flag-en"></span>
<span class="sportIcon-6423"></span>
<span class="sportName">American Football</span>
<span class="sportIcon-3988"></span>
<span class="sportName">Athletics</span>
<span class="sportIcon-61420"></span>
.....

Обновлено в ответ на комментарий ниже

Вот некоторый пересмотренный код, чтобы показать, что мой код действительно тянет spanВам нужно.

url='https://www.betfair.com/sport/football'
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html)

test = soup.find_all('span',attrs={"class":"away-team-name"}) 
for span in test:
    print("away team" + span.text)

Производит:

away team
Marseille

away team
Lazio

away team
Academica

away team
Canada (W)

away team
Arnett Gardens FC

away team
UWI FC
....
Другие вопросы по тегам