将漂亮的列表输出转换为字符串



我正在抓取一个站点的一些统计数据并获得预期的结果,但我无法将最终列表输出到字符串中。搜索并尝试了我能找到的一切……strip(),append(),replace('n'),replace('ntr'),还有很多其他的东西。并且,我在最后得到一个输出错误,因为列表中有一些我不想要的附加项。

输出:

81
79
55
12
76
AttributeError: ResultSet object has no attribute 'text'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?

输出:

81 79 55 12 76

下面是我抓取的一个示例:

</li>, <li><span class="bp3-tag p p-81">81</span> f1</span>
</li>, <li><span class="bp3-tag p p-79">79</span> f2</span>
</li>, <li><span class="bp3-tag p p-55">55</span> f3</span>
</li>, <li><span class="bp3-tag p p-12">12</span> f4</span>
</li>, <li><span class="bp3-tag p p-76">76</span> f5</span>
[<li><span class="tooltip multiline" data-tooltip="some text i don't care about.">

我的代码看起来像这样,其中a_stats是正在搜索的字段列表(f1, f2,…)

dws = soup.find_all('div', {'class': 'col-3'})
more_lis = [div.find_all('li') for div in dws]
lis = soup.find_all('li') + more_lis
for li in lis:
for stats in a_stats:
if stats in li.text:
t = re.findall('d+', li.text)
ti = (" ".join(t))
print(ti)

我是个新手,感觉应该很容易,但我还做不到。帮助感激。提前感谢。

代替print(t1)试试print(t1, end=" ")

编辑

dws = soup.find_all('div', {'class': 'col-3'})
more_lis = [div.find_all('li') for div in dws]
lis = soup.find_all('li') + more_lis
for li in lis:
for stats in a_stats:
try:
if stats in li.text:
t = re.findall('d+', li.text)
ti = (" ".join(t))
print(ti)
except AttributeError:
pass

添加了try和except块来处理AttributeError


print中的end实参决定对象打印后应该跟随什么。默认情况下,它是n,所以你得到新的行。改成像" "一样的空格,就可以了。

下面是一个基于从文件中读取HTML的示例。用例所需的更改应该是明显的:-

from bs4 import BeautifulSoup
with open('/Users/andy/dummy.html') as html:
vals = []
soup = BeautifulSoup(html, 'html.parser')
divs = soup.find_all('div', class_='col-3')
for div in divs:
for li in div.find_all('li'):
vals.append(li.text+' ')
print(''.join(vals))

最新更新