gpt4 book ai didi

python - 将 lxml 输出传递给 BeautifulSoup

转载 作者:行者123 更新时间:2023-11-30 23:39:09 26 4
gpt4 key购买 nike

我的离线代码工作正常,但我在通过 lxml 将网页从 urllib 传递到 BeautifulSoup 时遇到问题。我使用 urllib 进行基本身份验证,然后使用 lxml 进行解析(它为我们需要抓取的特定页面提供了良好的结果),然后使用 BeautifulSoup。

#! /usr/bin/python
import urllib.request
import urllib.error
from io import StringIO
from bs4 import BeautifulSoup
from lxml import etree
from lxml import html

file = open("sample.html")
doc = file.read()
parser = etree.HTMLParser()
html = etree.parse(StringIO(doc), parser)
result = etree.tostring(html.getroot(), pretty_print=True, method="html")
soup = BeautifulSoup(result)
# working perfectly

有了这个工作,我尝试通过 urllib 向它提供一个页面:

# attempt 1
page = urllib.request.urlopen(req)
doc = page.read()
# print (doc)
parser = etree.HTMLParser()
html = etree.parse(StringIO(doc), parser)
# TypeError: initial_value must be str or None, not bytes

尝试处理错误消息,我尝试过:

# attempt 2
html = etree.parse(bytes.decode(doc), parser)
#OSError: Error reading file

我不知道如何处理 OSError,所以我寻求另一种方法。我发现使用 lxml.html 而不是 lxml.etree 的建议,因此下一次尝试是:

attempt 3
page = urllib.request.urlopen(req)
doc = page.read()
# print (doc)
html = html.document_fromstring(doc)
print (html)
# <Element html at 0x140c7e0>
soup = BeautifulSoup(html) # also tried (html, "lxml")
# TypeError: expected string or buffer

这清楚地给出了某种结构,但是如何将它传递给 BeautifulSoup 呢?我的问题是双重的:如何将页面从 urllib 传递到 lxml.etree (如 attampt 1 中,最接近我的工作代码)?或者,如何将 lxml.html 结构传递给 BeautifulSoup (如上所述)?我知道两者都围绕数据类型,但不知道如何处理它们。

python 3.3、lxml 3.0.1、BeautifulSoup 4。我是 python 新手。感谢互联网提供的代码片段和示例。

最佳答案

BeautifulSoup 可以使用lxml parser directly ,不需要这么长。

BeautifulSoup(doc, 'lxml')

关于python - 将 lxml 输出传递给 BeautifulSoup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13830303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com