我尝试在按钮标签内抓取一个ImageId,希望得到结果:
"25511e1fd64e99acd991a22d6c2d6b6c".
当我尝试:
drawing_url = drawing_url.find_all('button', class_='inspectBut')['onclick']
它不起作用。出现错误-
TypeError: list indices must be integers or slices, not str
输入=
for article in soup.find_all('div', class_='dojoxGridRow'):
drawing_url = article.find('td', class_='dojoxGridCell', idx='3')
drawing_url = drawing_url.find_all('button', class_='inspectBut')
if drawing_url:
for e in drawing_url:
print(e)
输出=
<button class="inspectBut" href="#"
onclick="window.open('getImg?imageId=25511e1fd64e99acd991a22d6c2d6b6c&
timestamp=1552011572288','_blank', 'toolbar=0,
menubar=0, modal=yes, scrollbars=1, resizable=1,
height='+$(window).height()+', width='+$(window).width())"
title="Open Image" type="button">
</button>
...
...
答案 0 :(得分:1)
尝试这个。
import re
#for all the buttons
btn_onlclick_list = [a.get('onclick') for a in soup.find_all('button')]
for click in btn_onlclick_list:
a = re.findall("imageId=(\w+)", click)[0]
print(a)
答案 1 :(得分:0)
您应该搜索
button_list = soup.find_all('button', {'class': 'inspectBut'})
这将为您提供按钮数组,以后您可以通过
获取url字段 [button['getimg?imageid'] for button in button_list]
您仍然需要进行一些解析,但是我希望这可以使您走上正确的轨道。
您在这里的错误是,您需要搜索正确的属性class
并查找正确的html标签,具有讽刺意味的是getimg?imageid
。
答案 2 :(得分:0)
您首先需要检查该属性是否存在。
tag.attrs
返回当前标记中存在的属性列表
请考虑以下代码。
代码:
from bs4 import BeautifulSoup
a="""
<td>
<button class='hi' onclick="This Data">
<button class='hi' onclick="This Second">
</td>"""
soup = BeautifulSoup(a,'lxml')
print([btn['onclick'] for btn in soup.find_all('button',class_='hi') if 'onclick' in btn.attrs])
输出:
['This Data','This Second']
或者您可以简单地做到这一点
[btn['onclick'] for btn in soup.find_all('button', attrs={'class' : 'hi', 'onclick' : True})]