Проблемы с анализом HTML с помощью BeautifulSoup - PullRequest
0 голосов
/ 09 февраля 2011

Я пытаюсь использовать BeautifulSoup для разбора HTML в Python. В частности, я пытаюсь создать два массива суповых объектов: один для дат публикации на веб-сайте, а другой для самих публикаций. Однако, когда я использую findAll в классе div, который соответствует сообщениям, возвращается только начальный тег, а не текст внутри тега. С другой стороны, мой код отлично работает для дат. Что происходит ??

# store all texts of posts
texts = soup.findAll("div", {"class":"quote"})

# store all dates of posts
dates = soup.findAll("div", {"class":"datetab"})

Первая строка выше возвращает только

<div class="quote">

что не то, что я хочу. Вторая строка возвращает

<div class="datetab">Feb<span>2</span></div>

то, что я хочу (предварительное уточнение).

Понятия не имею, что я делаю не так. Здесь - это сайт, который я пытаюсь проанализировать. Это для домашней работы, и я действительно очень отчаялся.

Ответы [ 3 ]

3 голосов
/ 09 февраля 2011

Какую версию BeautifulSoup вы используете?Версия 3.1.0 значительно хуже с реальным HTML (читай: недопустимый HTML), чем 3.0.8.Этот код работает с 3.0.8:

import urllib2
from BeautifulSoup import BeautifulSoup

page = urllib2.urlopen("http://harvardfml.com/")
soup = BeautifulSoup(page)
for incident in soup.findAll('span', { "class" : "quote" }):
    print incident.contents
1 голос
/ 09 февраля 2011

Этот сайт работает на Tumblr.Tumblr имеет API .

0 голосов
/ 09 февраля 2011

Существует порт Python Tumblr , который вы можете использовать для чтения документов.

from tumblr import Api

api = Api('harvardfml.com')
freq = {}
posts = api.read()
for post in posts:
   #do something here

для вашего поддельного findAll, без фактического исходного кода вашей программы трудно увидетьчто случилось.

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