网络抓取时,我们在哪里放置“ html.parser”参数?

问题描述

查看以下代码段

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构造函数中,因为

  1. 请求与Beautiful Soup是分开的,我不相信将html.parser放在构造函数上会做什么
  2. 您想为Beautiful Soup指定解析器,因为它可能解析的不是html之类的内容,例如lxml的XML解析器

Beautiful Soup Docs

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...