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()
我有以下问题:
BeautifulSoup()函数到底有什么作用?它需要page.content
和html.parser
的某处,只需要urllib2.urlopen(url).read
(如第二个例子中所述)。这很简单,但很难理解这里发生了什么。我查了官方文档,不是很有帮助。 (还请评论html.parser
和page.content
,为什么不仅仅是第二个例子中的html和页面?)
如上所述,在方法#2中,如果我跳过f.read()
命令会有什么不同?
对于专家来说,这些问题可能非常简单,但我真的很感谢这些问题的帮助。我google了很多但仍然没有得到答案。 谢谢!
答案 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.parser
和lxml
。它们基本相同,但具有不同的性能优势,这是我能说的唯一区别。
如果省略第二个参数,那么BeautifulSoup包只使用默认值,在大多数情况下为lxml
。
对于你的上一个问题,我并不完全确定,但我认为首先调用f.read()
或让BeautifulSoup隐含地执行此操作之间没有根本区别,但这并不总是有效并且是不好的做法。< / p>
就像@Klaus在给你的评论中所说,你应该真正阅读the docs here