Python'BeautiulSoup()'函数实际上做了什么?

时间:2017-07-12 06:09:39

标签: python python-2.7 beautifulsoup

Python nube在这里。我知道有两种方法可以解析到BeautifulSoup的URL以打开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()命令会有什么不同?

  3. 对于专家来说,这些问题可能非常简单,但我真的很感谢这些问题的帮助。我google了很多但仍然没有得到答案。 谢谢!

2 个答案:

答案 0 :(得分:2)

BeautifulSoup不会打开网址。它需要HTML,并使您能够美化输出(正如您所做的那样)。

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

这就是您需要阅读方法#2中的内容的原因。

因此,我认为您正在寻找错误的文档。您应该搜索如何使用请求或urllib(我建议自己请求)。

答案 1 :(得分:1)

BeautifulSoup是一个python包,可以帮助你解析html。

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

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

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

对于你的上一个问题,我并不完全确定,但我认为首先调用f.read()或让BeautifulSoup隐含地执行此操作之间没有根本区别,但这并不总是有效并且是不好的做法。< / p>

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