2014-11-10 2 views
0

На веб-сайте есть несколько таблиц. Я хочу выбрать один из них, и есть моя проблема. Когда я пишу:BeautifulSoup выбрать таблицу

g_data=soup.find_all("table",{"class":"awT votegroup votegroup7 wH episodesList"}, {"id":"sezon7"}) 

он находит меня точно только таблица N 7, но когда я пишу, как следующее:

html_1=("table",{"class":"awT votegroup votegroup7 wH episodesList"}, {"id":"sezon7"}) 
g_data=soup.find_all(html_1) 

Он находит все таблицы (из таблицы 1, 7). Что другое? Почему второе решение не работает? Я хочу использовать только таблицу nr 7 и превратить ее в функцию, поэтому мне нужно, чтобы второе решение работало правильно. Весь код:

from bs4 import BeautifulSoup 
import requests 

r=requests.get("http://www.filmweb.pl/serial/Synowie+Anarchii-2008-479538/episodes#sezon7") 
soup=BeautifulSoup(r.content) 
html_1=("table",{"class":"awT votegroup votegroup7 wH episodesList"}, {"id":"sezon7"}) 
g_data=soup.find_all(html_1) 
print g_data 

ответ

3

Вы передаете в аргументах для поиска неправильно. Вы должны были бы объединить эти в один словаря, а не использовать кортеж:

soup.find_all("table", {"class":"awT votegroup votegroup7 wH episodesList", "id":"sezon7"}) 

Это работает, но только только; class сопоставляется с списком (поскольку порядок классов в атрибуте class не имеет значения); вам здесь не нужно, так как у вас уже есть id.

Поскольку вы ищете только одной таблицы, используйте soup.find():

soup.find("table", id="sezon7") 

Ваш поиск в основном ищет любой элемент, имя был либо table или {"class":"awT votegroup votegroup7 wH episodesList"} или {"id":"sezon7"}, как вы только прошли в кортеж для фильтра name.

Если вы хотите, чтобы обернуть это в функцию, вы можете просто использовать переменные вместо строковых литералов:

element_type = 'table' 
element_id = 'sezon7' 
soup.find(element_type, id=element_id) 
Смежные вопросы