Beautifulsoup构造函数及其参数

时间:2016-08-07 20:31:40

标签: python beautifulsoup

我在这里看到很多方法来初始化一个Beautifulsoup对象。据我所知,你可以传递一个string = url或传递一些对象。例如,使用urllib

是很常见的
url="https://somesite.com"
url_html="<html><body><h1>Some header</h1><p>asdas</p></body></html>"
soup1=BeautifulSoup(url_html, "html.parser")  #1st way
print(soup1.find("p").text)    #can get the text "asdas"

soup2=BeautifulSoup(urllib.request.urlopen(url).read(), "html.parser")  #2nd way

soup3=BeautifulSoup(urllib.request.urlopen(url), "html.parser")  #3rd way

print(soup1.prettify())
print(soup2.prettify())
print(soup3.prettify())

但是在最后两种初始化汤的方法中会发生什么?据我所知,urllib.request.urlopen(url).read()与纯html字符串url_html是一回事。但是汤3怎么样?   它是否有效,因为BeautifulSoup的构造函数需要一个字符串,并且urlopen()返回的对象中有一个toString方法?并且对象被转换为字符串,实际上第3种方法与第2种方法相同?

还有其他方法可以初始化BeautifulSoup吗?哪个更好?

1 个答案:

答案 0 :(得分:2)

urlopen()返回一个类似文件的打开对象。 Beautifulsoup的构造函数使用类型检查来查看它是否有文件或字符串(确切地说,它是markup.hasattr("read")。在第一种情况下,它只是调用它的read()方法。

这是Python库中常见的模式,用于处理大量用户提供的文本数据。

Soup案例的不同之处并不存在。其他库可以使用文件对象做更聪明的事情,例如对它进行分区,而不是将其加载到内存中。