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

问题描述 投票:0回答:3

使用 BeautifulSoup 从少数网页(使用 URL 列表)中抓取文本的最简单方法是什么?还可能吗?

最好的, 乔治娜

python web-scraping beautifulsoup
3个回答
6
投票
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
投票

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

一些提示:

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

1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.