Python — самый простой способ очистить текст из списка URL-адресов с помощью BeautifulSoup

Какой самый простой способ очистить только текст с нескольких веб-страниц (используя список URL-адресов) с помощью BeautifulSoup? Это вообще возможно?

Бест, Джорджина


person Georgina    schedule 16.03.2011    source источник


Ответы (3)


import urllib2
import BeautifulSoup
import re

Newlines = re.compile(r'[\r\n]\s+')

def getPageText(url):
    # given a url, get page content
    data = urllib2.urlopen(url).read()
    # parse as html structured document
    bs = BeautifulSoup.BeautifulSoup(data, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    # kill javascript content
    for s in bs.findAll('script'):
        s.replaceWith('')
    # find body and extract text
    txt = bs.find('body').getText('\n')
    # remove multiple linebreaks and whitespace
    return Newlines.sub('\n', txt)

def main():
    urls = [
        'http://www.stackoverflow.com/questions/5331266/python-easiest-way-to-scrape-text-from-list-of-urls-using-beautifulsoup',
        'http://stackoverflow.com/questions/5330248/how-to-rewrite-a-recursive-function-to-use-a-loop-instead'
    ]
    txt = [getPageText(url) for url in urls]

if __name__=="__main__":
    main()

Теперь он удаляет javascript и декодирует html-объекты.

person Hugh Bothwell    schedule 16.03.2011
comment
Удивительный! Большое спасибо, @Hugh Bothwell! - person Georgina; 16.03.2011

Это вполне возможно. Самый простой способ - перебрать список URL-адресов, загрузить контент, найти URL-адреса, добавить их в основной список. Остановите итерацию, когда будет найдено достаточное количество страниц.

Несколько советов:

  • urllib2.urlopen для получения контента
  • BeautifulSoup: findAll('a') для поиска URL
person Jiri    schedule 16.03.2011
comment
Привет @Jiri -- ты имеешь в виду найти HTML ? - person Georgina; 16.03.2011
comment
Хорошо, вам не нужно перемещаться по сайту по URL-адресам на страницах. Лишь бы убрать текст. Вы можете попробовать ''.join(soup.findAll(text=True)) - person Jiri; 16.03.2011

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

person philnext    schedule 16.03.2011