【问题标题】:Python 'BeautiulSoup()' function what does it actually do?Python 'BeautifulSoup()' 函数它实际上做了什么?
【发布时间】:2017-07-12 06:09:39
【问题描述】:

这里是 Python nube。我知道将 URL 解析为 BeautifulSoup 以打开 URL 的两种方法。

方法 #1 使用请求

from bs4 import BeautifulSoup
import requests   
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
print soup.prettify()

方法 #2 使用 URLLIB/URLLIB2

from bs4 import BeautifulSoup
import urllib2
f = urllib2.urlopen(url)
page = f.read() #Some people skip this step.
soup = BeautifulSoup(page)
print soup.prettify()

我有以下问题:

  1. BeautifulSoup() 函数究竟是做什么的?某处需要page.contenthtml.parser,而某处只需要urllib2.urlopen(url).read(如第二个示例中所述)。这很容易补习,但很难理解这里发生了什么。我检查了官方文档,不是很有帮助。 (也请评论html.parserpage.content,为什么不像第二个例子那样只是html 和页面?)

  2. 在上述方法#2中,如果我跳过f.read()命令会有什么不同?

对于专家来说,这些问题可能非常简单,但我非常感谢您提供这些帮助。我用谷歌搜索了很多,但仍然没有得到答案。 谢谢!

【问题讨论】:

标签: python python-2.7 beautifulsoup


【解决方案1】:

BeautifulSoup 不打开 URL。它需要 HTML,并让您能够美化输出(就像您所做的那样)。

在方法 #1 和 #2 中,您都使用另一个库(请求或 urllib)获取 HTML,然后将生成的 HTML 呈现给漂亮的汤。

这就是为什么你需要阅读方法#2中的内容。

因此,我认为您正在寻找错误的文档位置。您应该搜索如何使用 request 或 urllib(我自己推荐 requests)。

【讨论】:

    【解决方案2】:

    BeautifulSoup是一个帮助你解析html的python包。

    它需要的第一个参数只是一个原始 html 响应,或者它可以解析的任何原始 html 或 xml 文本,所以只要它是有效的 html 格式,什么包提供它并不重要。

    第二个参数,在您的第一个示例中,html.parser 告诉 BeautifulSoup 使用哪个包来实际解析数据。据我所知,只有 2 个选项,html.parserlxml。它们基本相同,但性能优势不同,据我所知,这是唯一的区别。

    如果您省略第二个参数,那么 BeautifulSoup 包将使用默认值,在大多数情况下为 lxml

    对于你的最后一个问题,我不完全确定,但我认为首先调用 f.read() 或让 BeautifulSoup 隐含地这样做没有根本区别,但这并不总是有效,而且是不好的做法。

    就像@Klaus 在给你的评论中所说,你真的应该阅读the docs here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-28
      • 2010-12-31
      • 2013-06-02
      • 2020-11-21
      • 2015-02-26
      • 2017-06-29
      • 2013-06-13
      • 2021-10-25
      相关资源
      最近更新 更多