Изменение порядка разбора HTML-данных в Python - PullRequest
1 голос
/ 15 февраля 2012

У меня мало опыта программирования, поэтому прошу прощения за мое невежество.

Я пытаюсь проанализировать страницу «Ключевая статистика» из Yahoo!Финансы, если быть точным это страница.Я дурачился с BeautifulSoup и смог извлечь данные, которые хотел, но с тех пор натолкнулся на умственный блок.Я хотел бы, чтобы данные отображались следующим образом:

measure[i]: value[i]
.
.  
measure[n]: value[n]

, но результаты, которые я получаю с помощью сценария:

measure[i]  
.
.    
measure[n]  
value[i]
.
.
value[n]

Вот моя попытка объединения двух полей данныхвместе, который выдает ошибку:

measure = soup.findAll('td', {'class':'yfnc_tablehead1'}, width='74%')  
value = soup.findAll('td', {'class':'yfnc_tabledata1'}) 

for incident in measure:
    x = incident.contents

for incident2 in value:
    y = incident2.contents

data = x + y

print ': '.join(data)

Более того, в этих значениях есть нежелательные символы, которые я хотел бы удалить, но я прочитаю документацию re.compile и re.sub.

Спасибо за любой вклад.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012
data = x + y

оператор + добавляет списки, если вы хотите соединить соответствующие элементы списков, попробуйте функцию zip():

data = zip(x,y)
for m,v in data:
  print m,v

также

for incident in measure:
  x = incident.contents

это перезаписывает x на каждой итерации цикла, поэтому в конце x содержит только последнее присвоенное значение, а не их совокупность. здесь вы, вероятно, захотите использовать оператор + следующим образом:

for incident in measure:
  x += incident.contents # x += y is the same as x = x + y

Конечно, то же самое относится и к другому циклу.

0 голосов
/ 15 февраля 2012
measures = ['1', '2', '3', '4']
values = ['a', 'b', 'c', 'd']

for pair in zip(measures, values):
    print ': '.join(pair)

# 1: a
# 2: b
# 3: c
# 4: d

О zip:

Type:       builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form:<built-in function zip>
Namespace:  Python builtin
Docstring:
zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]

Return a list of tuples, where each tuple contains the i-th element
from each of the argument sequences.  The returned list is truncated
in length to the length of the shortest argument sequence.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...