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

Posted

技术标签:

【中文标题】Python - 使用 BeautifulSoup 从 URL 列表中抓取文本的最简单方法【英文标题】:Python - Easiest way to scrape text from list of URLs using BeautifulSoup 【发布时间】:2011-07-16 22:04:24 【问题描述】:

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

最好, 乔治娜

【问题讨论】:

【参考方案1】:

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

只是一些提示:

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

【讨论】:

嗨@Jiri——你的意思是“找到html”吗? 好的,你不需要通过页面中的 URL 来遍历站点。只是为了剥离文字。你可以试试 ''.join(soup.findAll(text=True))【参考方案2】:
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.***.com/questions/5331266/python-easiest-way-to-scrape-text-from-list-of-urls-using-beautifulsoup',
        'http://***.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 实体。

【讨论】:

太棒了!非常感谢,@Hugh Bothwell!【参考方案3】:

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

【讨论】:

以上是关于Python - 使用 BeautifulSoup 从 URL 列表中抓取文本的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章

Python BeautifulSoup库使用

python爬虫之beautifulsoup的使用

python BeautifulSoup的简单使用

python中的BeautifulSoup使用小结

python3.4 使用BeautifulSoup

python爬虫——BeautifulSoup