通过表/列表中的锚文本查找href

时间:2016-10-31 01:14:11

标签: python python-3.x web-scraping python-requests bs4

我正在尝试使用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'但没有成功。

我觉得我搞砸了,因为它是一张桌子,链接在里面。

2 个答案:

答案 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'] 

非常适合我。我只得到了我想要的链接。