2013-02-13 5 views
0

Я использую urllib2 модуль в Python, чтобы принести какую-то информацию из тегов привязки некоторых URLs как http://www.google.co.in/, ниже приведен кодСоздать список кортежей из списка в Python

import urllib2 
import urlparse 
from BeautifulSoup import BeautifulSoup 

url = "http://www.google.co.in/" 
page = urllib2.urlopen(url) 
html = page.read() 
page.close() 
soup = BeautifulSoup(html) 
for tag in soup.findAll('a', href=True): 
    text = tag.text 
    tag['href'] = urlparse.urljoin(url, tag['href']) 
    print '  '.join([text,tag['href']]) 

результат:

Web History  http://www.google.co.in/history/optout?hl=en 
Settings  http://www.google.co.in/preferences?hl=en 
Sign in  https://accounts.google.com/ServiceLogin?hl=en&continue=http://www.google.co.in/ 
Advanced search  http://www.google.co.in/advanced_search?hl=en-IN&authuser=0 
Language tools  http://www.google.co.in/language_tools?hl=en-IN&authuser=0 
....................... 

Теперь его хорошо, но я хочу, чтобы хранить информацию в виде списка кортежей, как показано ниже

[('Web History','http://www.google.co.in/history/optout?hl=en'),('Settings','http://www.google.co.in/preferences?hl=en'),('Sign in','https://accounts.google.com/ServiceLogin?hl=en&continue=http://www.google.co.in/')................] 

Так может кто-нибудь, дайте мне знать, как мы форматировать данные, поступающие из за петли, как описано выше список кортежей

+0

Не будет ли диктовать лучше? (для хранения) – pradyunsg

ответ

2

Попробуйте что-то вроде этого:

[(tag.text, urlparse.urljoin(url, tag['href'])) 
     for tag in soup.findAll('a', href=True)] 
+0

Чтобы честно сказать, я просто хочу использовать этот список для рендеринга на шаблоне на какой-либо веб-странице, но перед большим количеством ошибок, таких как «ascii», кодек не может кодировать символы в позиции 0-4: порядковый номер не в диапазоне (128), так что делать, чтобы избежать подобных ошибок? –

+0

@shivakrishna - Я думаю, вам следует опубликовать отдельный вопрос об рендеринге ваших данных, используя соответствующий код, который вы используете, и точные ошибки, которые вы получаете ... – root

+0

, но вопросы могут содержать один и тот же код, ожидая, почему ошибки отображаются правильно? и спросили, потому что уже вы, ребята, знаете, что здесь происходит ... В любом случае попытается создать новый вопрос :) –

0

Вы можете попробовать создать хэш и экстрагирование items() кортеж из него, это просто хак:

def __init__(self, *args, **kwargs): 
    super(IndicatorForm, self).__init__(*args, **kwargs) 
    d = dir(indicators) 
    b = {} 
    for a in d: 
     b[a] = a 
    b = b.items() 
    b.sort() 
    self.fields["choice"].choices = b 

Здесь реж (индикаторы) является массивом.