使用美丽的汤获得href

时间:2017-01-01 15:38:00

标签: python beautifulsoup urllib

我正在尝试为此html代码提取特定链接

<a class="pageNum taLnk" data-offset="10" data-page-number="1" 
href="www.blahblahblah.com/bb32123">Page 1 </a>
<a class="pageNum taLnk" data-offset="20" data-page-number="2" 
href="www.blahblahblah.com/bb45135">Page 2 </a>

正如您所看到的,链接(href)是无序的,因此我没有使用模式,这意味着我需要使用BeautifulSoup手动提取href。

我想特别获得Page 2的href。

这些可以是我现在的代码。

 from bs4 import BeautifulSoup
 import urllib

 url = 'https://www.tripadvisor.com/ShowUserReviews-g293917-d539542-r447460956-Duangtawan_Hotel_Chiang_Mai-Chiang_Mai.html#REVIEWS'
 page = urllib.request.urlopen(url)
 soup = BeautifulSoup(page, 'html.parser')
 for link in soup.find_all('a', attrs = {'class' : 'pageNum taLnk'}):
     print (link)

正如您所看到的,我一直在努力获取专门针对第2页的href信息。无论如何,只能使用data-page-number = "2"data-offset = "20"等标记中的额外信息进行访问。

1 个答案:

答案 0 :(得分:2)

page_2 = soup.find('a', attrs = {'data-page-number' : '2'})

这只会让你获得第2页,如果你想获得下一页,无论当前页面是什么,你应该找到下一页网址:

next_page = soup.find('a', attrs = {'class' = 'nav next rndBtn ui_button primary taLnk'})
  

某些属性(如HTML 5中的data- *属性)具有名称   不能用作关键字参数的名称:

data_soup = BeautifulSoup('<div data-foo="value">foo!</div>')
data_soup.find_all(data-foo="value")
# SyntaxError: keyword can't be an expression
     

您可以通过将这些属性放入搜索中来使用这些属性   字典并将字典传递给find_all()作为attrs   参数:

data_soup.find_all(attrs={"data-foo": "value"})
# [<div data-foo="value">foo!</div>]