2013-04-11 6 views
0

Я использую Beautiful Soup для анализа таблицы HTML.Python & Beautiful Soup - строки результата поиска

  • Python версии 3.2
  • Beautiful Soup версия 4.1.3

Я бегу в проблему при попытке использовать метод FindAll, чтобы найти столбцы в моих рядах. Я получаю сообщение об ошибке, которое говорит, что объект списка не имеет атрибута findAll. Я нашел этот метод через другую запись в стеке, и это не было проблемой. (BeautifulSoup HTML table parsing)

Я понимаю, что findAll - это метод BeautifulSoup, а не списков python. Странная часть - метод findAll, когда я нахожу строки в списке таблиц (мне нужна только вторая таблица на странице), но когда я пытаюсь найти столбцы в списке строк.

Вот мой код:

from urllib.request import URLopener 
from bs4 import BeautifulSoup 

opener = URLopener() #Open the URL Connection 
page = opener.open("http://www.labormarketinfo.edd.ca.gov/majorer/countymajorer.asp?CountyCode=000001") #Open the page 
soup = BeautifulSoup(page) 

table = soup.findAll('table')[1] #Get the 2nd table (index 1) 
rows = table.findAll('tr') #findAll works here 
cols = rows.findAll('td') #findAll fails here 
print(cols) 

ответ

3

findAll() возвращает список в результата, вы должны были бы перебрать те или выбрать один, чтобы добраться до другого в замкнутых элемента с его собственным findAll() способом:

table = soup.findAll('table')[1] 
rows = table.findAll('tr') 
for row in rows: 
    cols = rows.findAll('td') 
    print(cols) 

или выбрать один ряд:

table = soup.findAll('table')[1] 
rows = table.findAll('tr') 
cols = rows[0].findAll('td') # columns of the *first* row. 
print(cols) 

Заметим, что findAll устарел, вместо этого вы должны использовать find_all().

+0

Спасибо, что работает. – fb20009