如何使用Python从BeautifulSoup打印多个值
我正在尝试使用BeautifulSoup从网页中获取两个值。仅打印一个值时,内容看起来不错。但是,当打印两个值(到同一行)时,html代码将围绕其中一个值显示 这是我的密码:如何使用Python从BeautifulSoup打印多个值,python,beautifulsoup,Python,Beautifulsoup,我正在尝试使用BeautifulSoup从网页中获取两个值。仅打印一个值时,内容看起来不错。但是,当打印两个值(到同一行)时,html代码将围绕其中一个值显示 这是我的密码: from bs4 import BeautifulSoup import urllib.request as urllib2 list_open = open("source.txt") read_list = list_open.read() line_in_list = read_list.split("\n")
from bs4 import BeautifulSoup
import urllib.request as urllib2
list_open = open("source.txt")
read_list = list_open.read()
line_in_list = read_list.split("\n")
i = 0
for url in line_in_list:
soup = BeautifulSoup(urllib2.urlopen(url).read(), 'html.parser')
sku = soup.find_all(attrs={'class': "identifier"})
description = soup.find_all(attrs={'class': "description"})
for text in description:
print((sku), text.getText())
i += 1
输出如下所示:
[<span class="identifier">112404</span>] A natural for...etc
[<span class="identifier">110027</span>] After what...etc
[<span class="identifier">03BA5730</span>] Argentina is know...etc
[<span class="identifier">090030</span>] To be carried...etc
sku = soup.find_all(attrs={'class': "identifier"})
description = soup.find_all(attrs={'class': "description"})
print(sku[0].get_text(), description[0].get_text())
[112404]自然的……等
[110027]什么之后……等等
[03BA5730]阿根廷知道……等等
[090030]待运……等
输出最好不包含数字周围的[
-内容
我猜问题出在最后一个for循环中,但我不知道如何更正。非常感谢所有帮助。谢谢!-Espen看起来您需要
zip()
标识符和描述,并为循环中找到的每个标记调用getText()
:
identifiers = soup.find_all(attrs={'class': "identifier"})
descriptions = soup.find_all(attrs={'class': "description"})
for identifier, description in zip(identifiers, descriptions):
print(identifier.getText(), description.getText())
find_all()
返回一个ResultSet
,这或多或少是一个奇特的列表。打印ResultSet
将包括通常表示列表的左右方括号,并且项目(标记)将显示在其中
您的示例输出表明,每个URL的HTML包含一个SKU和每个URL的一个描述。如果这是正确的,那么您的代码可以在每个结果集中选择第一项,如下所示:
[<span class="identifier">112404</span>] A natural for...etc
[<span class="identifier">110027</span>] After what...etc
[<span class="identifier">03BA5730</span>] Argentina is know...etc
[<span class="identifier">090030</span>] To be carried...etc
sku = soup.find_all(attrs={'class': "identifier"})
description = soup.find_all(attrs={'class': "description"})
print(sku[0].get_text(), description[0].get_text())
或者,您可以使用find()
,找到每一项的第一项:
但是,您的代码表明每个SKU可以有多个描述,因为您正在迭代描述结果集。也许每页可以有多个SKU和描述(在这种情况下,请参见)?很难判断
如果您可以通过添加实时URL或示例HTML更新您的问题,我们可以提供更好的建议。谢谢@mhawke。每个sku只有一个描述,两种解决方案在我的案例中都有效。