Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 22, 2016 05:16:20

Cruzlik
Зарегистрирован: 2016-04-22
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup ошибка

Помогите пожалуйста. пытаюсь достать информацию со второго столбца , а код выдает ошибку. Что делаю не так?

это фрагмент страницы , строк очень много в таблице поэтому и цикл.

#!/usr/bin/env python3
import urllib.request
import requests
from bs4 import BeautifulSoup
import re
rows = ['<html><head><title>Page title</title></head><table class="adv_table">'
		'<tr>'
		'<td style="color: #333; font-size: 11px;"> <span class="price_realty_table"><b>1 660 000</b></span> <div class="owner_stile">Аэропрот</div> </td>',
		'<td align="center"> <span style="white-space:nowrap;"><b>	8 (555) 555-55-88</span><br/><span> 8 (555) 555-31-88</span> </b></td>', 
		'<td align="center" id="td_statDaily_255729_1" style="color: #000000; font-size: 10px;">ЭКРАН<strong>195</strong> <a class="link_modal_details" href="javascript:realty.getStatDaily( 255629, 1 );">детали</a><br/> <a class="nyroModal" href="#statDaily_255629_1" style="display: none;">детали</a> <div id="div_statDaily_255729_1"></div> </td>', 
		'<td align="center" style="border-right:0"> <input class="ids_actions" name="ids_action[]" type="checkbox" value="255629"/> </td></tr></table></html>']
soup = BeautifulSoup(''.join(rows))
table = soup.find('table', class_='adv_table')
rows = table.find('tr')
for row in rows:
	cols = row.findAll('td')
	print(cols[1].b.text)

выдает ошибку

Traceback (most recent call last):
File “probe.py”, line 25, in <module>
print(cols.b.text)
IndexError: list index out of range



Отредактировано Cruzlik (Апрель 22, 2016 05:29:21)

Офлайн

#2 Апрель 22, 2016 05:28:07

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9958
Репутация: +  856  -
Профиль   Отправить e-mail  

BeautifulSoup ошибка

Cruzlik
пытаюсь достать информацию со второго столбца
Cruzlik
cols[2]
Это обращение к третьему.



Офлайн

#3 Апрель 22, 2016 05:29:34

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

BeautifulSoup ошибка

Вот что вам не дает вывести на печать содержимое cols?



Офлайн

#4 Апрель 22, 2016 05:29:50

Cruzlik
Зарегистрирован: 2016-04-22
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup ошибка

py.user.next
исправил все равно ошибка

Офлайн

#5 Апрель 22, 2016 05:32:00

Cruzlik
Зарегистрирован: 2016-04-22
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup ошибка

FishHook
Вот что вам не дает вывести на печать содержимое cols?
причем если я на реальной странице все провожу, то цикл вначале печатает содержимое, а потом выдает такую же ошибку

Офлайн

#6 Апрель 22, 2016 05:52:34

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

BeautifulSoup ошибка

Cruzlik
причем если я на реальной странице все провожу

сделайте так
for row in rows:
	cols = row.findAll('td')
	print(cols)



Офлайн

#7 Апрель 22, 2016 06:00:18

Cruzlik
Зарегистрирован: 2016-04-22
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup ошибка

FishHook

Проверял
Печатает четыре строки с пустыми квадратными скобками

И все.

Отредактировано Cruzlik (Апрель 22, 2016 06:01:56)

Офлайн

#8 Апрель 22, 2016 06:01:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9958
Репутация: +  856  -
Профиль   Отправить e-mail  

BeautifulSoup ошибка

Cruzlik
rows = table.find('tr')
rows = table.findAll('tr')



Офлайн

#9 Апрель 22, 2016 06:04:26

Cruzlik
Зарегистрирован: 2016-04-22
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup ошибка

py.user.next

Проверял все равно ошибка

Офлайн

#10 Апрель 22, 2016 06:24:51

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

BeautifulSoup ошибка

Cruzlik
Печатает четыре строки с пустыми квадратными скобками

rows = table.find('tr') - find возвращает один объект, вы делаете по нему цикл и получаете набор чилдов <td>, а потом ищете td в самом td.

Сделайте так
rows = table.findAll('tr')



Отредактировано FishHook (Апрель 22, 2016 06:25:23)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version