2015-07-21 96 views
0

我試圖找到,按順序,class =「A」和class =「B」。換句話說,我想使用OR運算符,以便按照正確的順序打印出結果。這裏是我的嘗試和結果:BeautifulSoup findall使用正則表達式找到類A或類B

#Attempt #1 
print(soup.find_all("li", attrs={"class": re.compile(r"Some Text A|Some Text B")})) 

#Attempt #2 
soup.findAll("li", {'class':['Some Text A', 'Some Text B']}) 

#Attempt #3 
print(soup.find_all("li", class_= re.compile(r"Some Text A|Some Text B"))) 

所有的嘗試都給了我一個空列表作爲結果,但應該有46個結果。我可以單獨做兩個班,但我不知道如何同時做。重要的是要注意,這兩個類不會同時歸於相同的li,而是兩個不同的類輸出不同的結果。

到目前爲止,沒有一個stackoverflow的答案已經奏效。我正在使用python 3.4和Beautifulsoup 4

回答

0

我找到了一個部分解決方案。出於某種原因,當字符串「A」或/和字符串「B」包含空格時,正則表達式將無法正常工作。例如:

這不起作用:

print(soup.find_all("li", attrs={"class": re.compile(r"Some Text A|Some Text B")})) 

但這個工程:

print(soup.find_all("li", attrs={"class": re.compile(r"A|B")})) 

值得慶幸的是我的字符串仍不夠精確而排除空格後的文本。我希望對包含使用正則表達式時包含空格的字符串的搜索有所解釋或解決方法。

+0

這是因爲'Some Text A'表示爲三個單獨的CSS類:'Some','Text'和'A'。關於同一問題的前面的討論:http://stackoverflow.com/a/13794740/2998271 – har07