Screenscraping самый ужасный HTML Вы когда-либо видели в своей жизни

Вам нужно будет перейти к своей модели данных и добавить новый вычисляемый столбец в соответствующую таблицу, которая объединяет три столбца. Используйте этот новый столбец в качестве поля в вашем слайсере.

SlicerData = [column1] & ", " & [column2] & ", " & [column3]

Однако, в большинстве случаев вы получаете гораздо больше гибкости, имея три разных слайсера, по одному для каждого столбца. Не говоря уже о трех слайсерах по 10 штук в каждом, гораздо удобнее, чем один слайсер с 1000 штуками.

5
задан Andy Baird 9 April 2009 в 07:50
поделиться

5 ответов

Есть несколько приемов, которые можно использовать для очистки высокопрогнозируемых структур, таких как таблицы. Перед запуском HTML tidy вы можете использовать Regex или что-то еще для поиска и , за которыми следуют другие или и вставьте соответствующий доводчик непосредственно перед ним. Есть некоторые хитрости для размещения таблиц внутри , но нет ничего невозможного для обработки. Просто начните с поиска самой внутренней структуры и продвижения оттуда наружу.

Настоящая загадка - это такие вещи, как нераскрытые

и

, которые могут быть намного сложнее совпасть с их соответствующими (или отсутствующими) доводчиками.

3
ответ дан 14 December 2019 в 09:00
поделиться

Если вы открыты для других языков, таких как Python, Beautiful Soup отлично подходит для плохой реконструкции письменный HTML. Я только что попытался запустить ваш HTML через следующий фрагмент, и теперь он вполне читабелен.

#!/usr/bin/env python

from BeautifulSoup import BeautifulSoup

html = "long string of html"
soup = BeautifulSoup(html)
print soup.prettify()
2
ответ дан 14 December 2019 в 09:00
поделиться

Может быть, вам больше повезет, если вы соберете нужные результаты, используя регулярные выражения, а не анализируете их как XML.

0
ответ дан 14 December 2019 в 09:00
поделиться

I used xpath with Python's lxml library to parse IMDB Top 250 page. View the source for yourself to see how bad it is.

The following code parses a saved IMDB Top 250 page (top250.html) and stores the extracted information in a sqlite database (top250.db)

import sqlite3
from lxml import html

tree = html.parse('top250.html')

class TopMovie(object):
    base_xpath = "/html/body/div/div[2]/layer/div[3]/table/tr/td[3]/div/table/tr/td/table/tr[%d]"

    def __init__(self, num):
        self.rank = num
        self.xpath = self.base_xpath % (self.rank + 1)

    def rating(self):
        return tree.xpath(self.xpath + '/td[2]/font')[0].text

    def link(self):
        return tree.xpath(self.xpath + '/td[3]/font/a')[0].values()[0]

    def title(self):
        return tree.xpath(self.xpath + '/td[3]/font')[0].text_content()

    def votes(self):
        return tree.xpath(self.xpath + '/td[4]/font')[0].text


def main():
    conn = sqlite3.connect('top250.db')
    conn.execute("""DROP TABLE IF EXISTS movies""")
    conn.execute("""
        CREATE TABLE movies (
            id INTEGER PRIMARY KEY,
            title TEXT,
            link TEXT,
            rating TEXT,
            votes INTEGER
        )""")

    for n in xrange(1, 251):
        m = TopMovie(n)
        query = r'INSERT INTO movies VALUES (%d, "%s", "%s", "%s", "%s")' \
            % (n, m.title(), m.link(), m.rating(), m.votes().replace(',', ''))
        conn.execute(query)

    conn.commit()
    conn.close()


if __name__ == "__main__":
    main()
0
ответ дан 14 December 2019 в 09:00
поделиться

Если вы ищете данные, я бы просто удалил все html и обработал их как строку необработанный ввод. Вы можете использовать функцию strip_tags .

$clean = strip_tags($input);

// example: <p>Test paragraph.</p> <a href="#fragment">Other text</a>
// returns: Test paragraph. Other text
2
ответ дан 14 December 2019 в 09:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: