Соскоб с Python? - PullRequest
       15

Соскоб с Python?

2 голосов
/ 12 апреля 2011

Я хотел бы получить все индексные слова и их определения из здесь . Можно ли очистить веб-контент с помощью Python?

Исследование Firebug показывает, что следующий URL возвращает мое желаемое содержимое, включая и индекс, и его определение относительно 'a'.

http://pali.hum.ku.dk/cgi-bin/cpd/pali?acti=xart&arid=14179&sphra=undefined

какие модули используются? Есть ли доступный учебник?

Я не знаю, сколько слов проиндексировано в словаре. Я абсолютный новичок в программировании.

Ответы [ 2 ]

6 голосов
/ 12 апреля 2011

Вы должны использовать urllib2 для получения содержимого URL и BeautifulSoup для анализа HTML / XML.

Пример - получение всех вопросов с главной страницы StackOverflow.com:

import urllib2
from BeautifulSoup import BeautifulSoup

page = urllib2.urlopen("http://stackoverflow.com")
soup = BeautifulSoup(page)

for incident in soup('h3'):
    print [i.decode('utf8') for i in incident.contents]
    print

Этот пример кода был адаптирован из документации BeautifulSoup .

3 голосов
/ 12 апреля 2011

Вы можете получать данные из Интернета, используя встроенный urllib или urllib2, но сам синтаксический анализ является наиболее важной частью. Могу ли я предложить замечательную BeautifulSoup? Это может иметь дело практически с чем угодно. http://www.crummy.com/software/BeautifulSoup/

Документация построена как учебник. Сорта: http://www.crummy.com/software/BeautifulSoup/documentation.html

В вашем случае вам, вероятно, нужно использовать символы подстановки, чтобы увидеть все записи в словаре. Вы можете сделать что-то вроде этого:

import urllib2

def getArticles(query, start_index, count):
    xml = urllib2.urlopen('http://pali.hum.ku.dk/cgi-bin/cpd/pali?' +
                          'acti=xsea&tsearch=%s&rfield=entr&recf=%d&recc=%d' %
                          (query, start_index, count))

    # TODO:
    # parse xml code here (using BeautifulSoup or an xml parser like Python's
    # own xml.etree. We should at least have the name and ID for each article.
    # article = (article_name, article_id)

    return (article_names # a list of parsed names from XML

def getArticleContent(article):
    xml = urllib2.urlopen('http://pali.hum.ku.dk/cgi-bin/cpd/pali?' +
                          'acti=xart&arid=%d&sphra=undefined' % article_id)

    # TODO: parse xml
    return parsed_article

Теперь вы можете зацикливаться на вещах. Например, чтобы получить все статьи, начинающиеся с 'ana', используйте подстановочный знак 'ana *' и повторяйте цикл, пока не получите никаких результатов:

query = 'ana*'
article_dict = {}
i = 0
while (true):
    new_articles = getArticles(query, i, 100)
    if len(new_articles) == 0:
        break

    i += 100
    for article_name, article_id in new_articles:
        article_dict[article_name] = getArticleContent(article_id)

Когда вы закончите, у вас будет словарь содержания всех статей, на которые ссылаются имена. Я пропустил сам синтаксический анализ, но в данном случае это довольно просто, поскольку все является XML. Возможно, вам даже не потребуется использовать BeautifulSoup (хотя он все еще удобен и прост в использовании для XML).

Слово предупреждения, хотя: Вы должны проверить политику использования сайта (и, возможно, robots.txt), прежде чем пытаться тщательно отбирать статьи. Если вы просто получаете несколько статей для себя, они могут не заботиться (владелец авторских прав словаря, если это не общественное достояние, может заботиться, хотя), но если вы собираетесь почистить весь словарь, это будет немного интенсивное использование.

...