【问题标题】:Python 3 web scraping optionsPython 3 网页抓取选项
【发布时间】:2011-08-10 23:54:13
【问题描述】:

我是 Python 新手,如果这是一个新手问题,我很抱歉。

我正在尝试构建一个涉及网页抓取的程序,我注意到 Python 3 的网页抓取模块似乎比 Python 2.x 系列少得多。

Beautiful Soup、mechanize 和 scrapy——向我推荐的三个模块——似乎都不兼容。

我想知道这个论坛上是否有人可以选择使用 python 3 进行网页抓取。

任何建议将不胜感激。

谢谢, 会

【问题讨论】:

    标签: python-3.x web-scraping


    【解决方案1】:

    lxml.html 在 Python 3 上工作,至少可以解析 html。

    BeautifulSoup 4 正在开发中,应该支持 Python 3(我已经在这方面做了一些工作)。

    【讨论】:

    • lxml 解析很好,处理无效的 HTML 几乎和 BeautifulSoup 一样。它也更快,但更难安装。
    • Ubuntu 用户可以简单地安装包python3-lxml。 BeautifulSoup 4 将使用 lxml(或其他解析器),并专注于访问 DOM 的方法。所以它将受益于 lxml 的速度。
    【解决方案2】:

    我是新手,但我发现BeautifulSoup 4 非常好,我正在学习并使用这个与requestslxml 模块。 requests 模块用于获取 url 和 lxml(您也可以使用内置的 html.parser 进行解析,但我猜 lxml 更快)用于解析。

    简单的用法是:

    import requests
    from bs4 import BeautifulSoup
    
    url = 'someUrl'
    
    response = requests.get(url)
    
    soup = BeautifulSoup(response.text, 'lxml')
    

    如何从 html 中获取 href 的不简单示例:

    links = set()
    for link in soup.find_all('a'):
        if 'href' in link.attrs:
            links.add(link)
    

    然后你会从你的 url 中获得带有唯一链接的 set

    如何解析 html 的特定部分的其他示例,例如如果您希望解析所有具有testClass 类的<p> 标签:

    list_of_p = []
    for p in soup.find_all('p', {'class': 'testClass'}):
        for item in p:
            list_of_p.append(item)
    

    你可以用它做很多事情,就像看起来一样简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-29
      • 2016-02-10
      • 2012-08-02
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 2022-01-27
      相关资源
      最近更新 更多