我正在尝试使用Python bs4从我之前成功登录的网站(使用请求)中提取具有特定锚文本的href。
以下是目标网页的伪HTML:
<table class="submissions">
<thead>some thead</thead>
<tbody><tr class="active">
<th scope="row">uninterestingtext</th>
<td>uninterestingtext</td><td></td>
</tr>
<tr class="active">
<th scope="row">uninteresting</th>
<td>uninteresting text</td><td></td></tr>
<tr class="lastrow active"><th scope="row">uninteresting</th>
<td>uninteresting text</td>
<td></td>
</tr>
<tr class="lastrow inactive">
<th scope="row">uninteresting text</th>
<td>uninterestingtext
<ul>
<li><a href="uninteresting_href">someLink</a> </li>
<li><a href="uninteresting_href">someLink</a> </li>
<li><a href=**InterestingLink**>**Upload...**</a></li>
</ul>
</td>
</tr></tbody></table>
现在,我正在尝试通过查找“a”标记之间的上传... 文本来提取 InterestingLink 。
以下是我的尝试:
landing_page_soup = BeautifulSoup(*responseFromSuccessfulLogin*.text, 'html.parser')
important_page = landing_page_soup.find('a',{'href':True,'text':'Upload...'}).get('href')
但这总是会引发错误
AttributeError: 'NoneType' object has no attribute 'get'
因为“important_page”始终为“无”。
注意:我已确定“ responseFromSuccessfulLogin .text”是正确的HTML,其中包含所需的链接。
在阅读了有关类似问题的其他论坛帖子后,我修改了该行,使用'select'方法查询css-selectors以及方法'findAll'但没有成功。
我觉得我搞砸了,因为它是一张桌子,链接在里面。
答案 0 :(得分:0)
BeautifulSoup接受可调用对象。
html = BeautifulSoup(response.content, 'html.parser')
important_page = html.findAll('a', href=True, text=lambda i: i if 'Upload...' in i else False)
print(important_page[0]['href'])
答案 1 :(得分:0)
(代表OP发布解决方案)。
此:
important_page = landing_page_soup.find('a', title='Upload...')['href']
非常适合我。我只得到了我想要的链接。