2016-02-17 1 views
4

В BeautifulSoup, если я хочу, чтобы найти все Div, где чей класс span3, я бы просто сделать:Как найти все классы divs, начинающиеся со строки в BeautifulSoup?

result = soup.findAll("div",{"class":"span3"}) 

Однако, в моем случае, я хочу, чтобы найти все Div, чей класс начинается с span3, поэтому , BeautifulSoup должен найти:

<div id="span3 span49"> 
<div id="span3 span39"> 

и так далее ...

Как добиться того, что я хочу? Я знаком с регулярными выражениями; однако я не знаю, как реализовать их в красивом супе, и я не нашел никакой помощи, просмотрев документацию BeautifulSoup.

+0

Я не использовал BeautifulSoup, но мне кажется, что документация на самом деле [довольно ясно по этому вопросу] (http://www.crummy.com/software/BeautifulSoup/bs4/doc/# search-by-css-class): «Как и любой аргумент ключевого слова, вы можете передать класс_ строку, ** регулярное выражение **, функцию или« Истину ». –

ответ

3

Ну, это id атрибуты вы показываете:

<div id="span3 span49"> 
<div id="span3 span39"> 

В этом случае, вы можете использовать:

soup.find_all("div", id=lambda value: value and value.startswith("span3")) 

Или:

soup.find_all("div", id=re.compile("^span3")) 

Если это была просто опечаткой, и у вас на самом деле есть class атрибуты начинаются с span3, и вы действительно должны проверить класс, чтобы начать с span3, вы можете использовать «Starts-с» CSS selector:

soup.select("div[class^=span3]") 

Это потому, что вы не можете проверить class приписывать таким же образом вы проверил атрибут id, потому что class является особенным, это multi-valued attribute.

+0

Опечатка, извините:/Проверка кода ур –

+0

@GeorgeStack и убедитесь, что вы используете 'beautifulsoup4': ваш импорт должен быть' из bs4 import BeautifulSoup'. – alecxe

+0

Вы хотите сделать это для класса: ** для a в soup.select ("div [class^= span3]"): ** #do дерьмо –

2

Это тоже работает:

soup.select("div[class*=span3]") # with *= means: contains 
Смежные вопросы