(美丽汤)在按钮标签内获取数据

时间:2019-03-08 02:45:35

标签: python web-scraping beautifulsoup python-requests

我尝试在按钮标签内抓取一个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&amp;
                 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>
... 
...

3 个答案:

答案 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})]