问题描述
查看以下代码段
import requests
from bs4 import BeautifulSoup
url = #Insert url here
# Method 1
html = requests.get(url,"html.parser")
soup = BeautifulSoup( html.text )
#Method 2
html2 = requests.get(url)
soup2 = BeautifulSoup( html.text,"html.parser")
哪种方法正确?方法1或方法2?我们应该将“ html.parser”放入requests.get()还是BeautifulSoup()吗?
解决方法
解析器不是HTTP请求的一部分。
这是一种分析不同类型文档的方法。因此,在使用BeautifulSoup解析html文档的过程中,您必须提到解析器
所以,方法2是正确的。
BeautifulSoup构造函数的DocString
:param标记:一个字符串或类似文件的对象,表示 标记进行解析。
,:参数功能:要使用的解析器的所需功能。这个 可以是特定解析器的名称(“ lxml”,“ lxml-xml”, “ html.parser”或“ html5lib”),也可能是标记的类型 使用(“ html”,“ html5”,“ xml”)。建议你 命名一个特定的解析器,以便Beautiful Soup为您提供 在平台和虚拟环境中都可获得相同的结果。
如果我理解正确,则您的方法2是正确的,并且您希望将其放在BeautifulSoup构造函数中,因为
- 请求与Beautiful Soup是分开的,我不相信将html.parser放在构造函数上会做什么
- 您想为Beautiful Soup指定解析器,因为它可能解析的不是html之类的内容,例如lxml的XML解析器