Python BeautifulSoup从标题中提取数据

时间:2019-01-17 16:36:47

标签: python web-scraping beautifulsoup header

这是another question的后续行动。感谢你目前的帮助。

我有一些代码可以循环浏览页面并创建一个数据框。我试图添加第三条信息,但是它包含在标题中,因此它只是返回空白。代码的td和h3部分中包含的级别信息。它返回错误“ AttributeError:'NoneType'对象没有属性'text'” 。如果我将level.h3.text更改为level.h3,它将运行,但是它将在数据框,而不仅仅是数字。

import urllib
import bs4 as bs
import pandas as pd
#import csv as csv

sauce = urllib.request.urlopen('https://us.diablo3.com/en/item/helm/').read()
soup = bs.BeautifulSoup(sauce, 'lxml')

item_details =  soup.find('tbody')

names = item_details.find_all('div', class_='item-details')
types = item_details.find_all('ul', class_='item-type')
#levels = item_details.find_all('h3', class_='subheader-3')
levels = item_details.find_all('td', class_='column-level align-center')
print(levels)

mytable = []



for name, type, level in zip(names, types, levels):
    mytable.append((name.h3.a.text, type.span.text, level.h3.text))



export = pd.DataFrame(mytable, columns=('Item', 'Type','Level'))

1 个答案:

答案 0 :(得分:2)

尝试如下修改您的代码:

for name, type, level in zip(names, types, levels):
    mytable.append((name.h3.a.text, type.span.text, level.h3.text if level.h3 else "No level"))

现在将在没有级别(没有标题)的情况下,将"No level"(您可以使用"N/A"None或任何您最喜欢的东西)添加为第三个值