Очистить промежуток с помощью 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
....