Я хочу получить текст в промежутке. Я проверил, но проблемы не вижу

from bs4 import BeautifulSoup
import urllib.request
import socket

searchurl = "http://suchen.mobile.de/auto/search.html?scopeId=C&isSearchRequest=true&sortOption.sortBy=price.consumerGrossEuro"
f = urllib.request.urlopen(searchurl)
html = f.read()
soup = BeautifulSoup(html)
print(soup.findAll('span',attrs={'class': 'b'}))  

Результат был [], почему?

1
Taha berserk 2 Мар 2014 в 16:34
1
У вас пустой список [], потому что findAll ничего не нашел.
 – 
jonrsharpe
2 Мар 2014 в 16:45
1
Тег span со значением класса атрибута b отсутствует.
 – 
falsetru
2 Мар 2014 в 16:49
У меня есть промежуток с class = b. Я думаю, проблема в том, что возвращение - это таблица строки, которую я должен повторить
 – 
Taha berserk
2 Мар 2014 в 16:54
1
Показать точный HTML-код, который вы хотите извлечь со страницы
 – 
4d4c
2 Мар 2014 в 18:23

1 ответ

Лучший ответ

Глядя на рассматриваемый сайт, в результатах поиска появляется пустой список, поскольку нет интервалов со значением класса b . BeautifulSoup не распространяется вниз по CSS, как это сделал бы браузер. Кроме того, ваш запрос urllib выглядит некорректно. Глядя на сайт, я думаю , что вы хотите захватить все диапазоны с class из label, хотя это сложно, когда сайт не на моем родном языке. Вот как бы вы это сделали:

from bs4 import BeautifulSoup
import urllib2    # Note urllib2

searchurl = "http://suchen.mobile.de/auto/search.html?scopeId=C&isSearchRequest=true&sortOption.sortBy=price.consumerGrossEuro"
f = urllib2.urlopen(searchurl)  # Note no need for request
html = f.read()
soup = BeautifulSoup(html)

for s in soup.findAll('span', attrs={"class":"label"}):
    print s.text

Это дает для указанного URL:

Farbe:
Kraftstoffverbr. komb.:
Kraftstoffverbr. innerorts:
Kraftstoffverbr. außerorts:
CO²-Emissionen komb.:
Zugr.-lgd. Treibstoffart:
1
Hooked 2 Мар 2014 в 19:01