我正在抓取一个站点的一些统计数据并获得预期的结果,但我无法将最终列表输出到字符串中。搜索并尝试了我能找到的一切……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))