Python - 使用BeautifulSoup从URL列表中删除文本的最简单方法

时间:2011-03-16 20:20:35

标签: python screen-scraping beautifulsoup web-scraping

使用BeautifulSoup从少量网页(使用网址列表)中删除文本的最简单方法是什么?它甚至可能吗?

最佳, 乔治娜

3 个答案:

答案 0 :(得分:5)

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实体。

答案 1 :(得分:1)

这是完全可能的。最简单的方法是遍历URL列表,加载内容,查找URL,将它们添加到主列表中。找到足够的页面时停止迭代。

一些提示:

  • urllib2.urlopen用于获取内容
  • BeautifulSoup:findAll('a')用于查找网址

答案 2 :(得分:1)

我知道这不是你的确切问题(关于BeautifulSoup)的答案,但一个好主意是看看Scrapy这似乎符合你的需要。