2013-12-18 76 views
23

我正在尋找一種使用findAll獲取兩個標籤的方法,按照它們在頁面上的顯示順序。Python BeautifulSoup給出了多個標籤以查找所有

目前我有:

import requests 
import BeautifulSoup 

def get_soup(url): 
    request = requests.get(url) 
    page = request.text 
    soup = BeautifulSoup(page) 
    get_tags = soup.findAll('hr' and 'strong') 
    for each in get_tags: 
     print each 

如果我用一個頁面上,只有「時間」或「強」在它那會讓我所有的標籤,如果我在一個既使用它會得到'強'標籤。

有沒有辦法做到這一點?我主要關心的是保留標籤的發現順序。

回答

50

你可以pass a list,發現無論是hrstrong標籤:

tags = soup.find_all(['hr', 'strong']) 
+1

我認爲soup.findAll([ '小時', '強'])可以做的工作,find_all不運行。 – r0sk

+5

@ r0sk:'find_all()'是beautifulsoup4上的正確名稱。點擊答案中的鏈接。 'findAll()'用於BeautifulSoup 3,由Beautiful Soup 4取代。 – jfs

2

使用正則表達式:

import re 
get_tags = soup.findAll(re.compile(r'(hr|strong)')) 

表達r'(hr|strong)'會發現無論是hr標籤或標籤strong

相關問題