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

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

最好, 乔治娜

【问题讨论】:

    标签: python screen-scraping beautifulsoup web-scraping


    【解决方案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.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 实体。

    【讨论】:

    • 太棒了!非常感谢,@Hugh Bothwell!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 2022-01-05
      • 2017-11-14
      • 1970-01-01
      • 2020-01-23
      • 2020-09-02
      • 2019-05-27
      相关资源
      最近更新 更多