2010-03-04 14 views
-1

maintenant il est configuré pour écrire dans un fichier, mais je veux qu'il produise la valeur à une variable. Je ne sais pas comment.Comment faire le résultat de cette variable?

from BeautifulSoup import BeautifulSoup 
import sys, re, urllib2 
import codecs 


woof1 = urllib2.urlopen('someurl').read() 
woof_1 = BeautifulSoup(woof1) 
woof2 = urllib2.urlopen('someurl').read() 
woof_2 = BeautifulSoup(woof2) 

GE_DB = open('GE_DB.txt', 'a') 

for row in woof_1.findAll("tr", { "class" : "row_b" }): 
    for col in row.findAll(re.compile('td')): 
    GE_DB.write(col.string if col.string else '') 
GE_DB.write(" ") 
GE_DB.write("\n") 
GE_DB.close() 
for row in woof_2.findAll("tr", { "class" : "row_b" }): 
    for col in row.findAll(re.compile('td')): 
    GE_DB.write(col.string if col.string else '') 
GE_DB.write("\n") 
GE_DB.close() 
+2

Il aiderait énormément si vous nous avez expliqué (1) ce que vous entendez « sortie la valeur à une variable » pour signifier et une fois que est accompli (2) ce qui va faire avec votre script la "variable" - juste tomber à la fin du script ne semble pas valoir l'effort de l'étape 1. –

+0

ok donc quand vous exécutez le script ci-dessus sur un site avec une table. il prend quoi entre les balises td. Je voudrais qu'il stocke la valeur de cela comme variable. – Pevo

+5

Quoi de neuf avec les votes de masse -1? –

Répondre

-1
values = [] 
for row in woof_1.findAll("tr", { "class" : "row_b" }): 
    for col in row.findAll(re.compile('td')): 
    if col.string: 
     values.append(col.string) 
result = ''.join(values) 
+0

Je reçois une syntaxe invalide pour | si (col.string) | sur le) ne sais pas pourquoi. =/Quelque chose que j'ai fait? – Pevo

+0

@ Pevo, désolé pour cela, j'ai manqué un deux-points après si déclaration. Corrigé – Li0liQ

+0

Votre correspondant a omis une condition nécessaire ':' 'mais inclus redondants (' et ')' ;-) –

-1

peut-être comme ça.

gedb = ""; 
for row in woof_1.findAll("tr", { "class" : "row_b" }): 
    for col in row.findAll(re.compile('td')): 
    if col.string: 
     gedb += col.string 

+0

et pourquoi la mienne a-t-elle été dépréciée? tout commentaire apprécié! –

+0

La concaténation de chaînes comme celle-ci est généralement mal vue en Python. Il est préférable (style et efficacité) de construire une liste de chaînes puis de les 'joindre' (ou, si l'OP veut continuer à utiliser des objets de type fichier, utilisez 'StringIO'). Voir http://wiki.python.org/moin/PythonSpeed/PerformanceTips#StringConcatenation et http://www.skymind.com/~ocrow/python_string/ pour plus d'informations. –

+0

  merci! –

-1
import cStringIO as StringIO # or import StringIO if on a fringe platform 
buf = StringIO.StringIO() 
for row in woof_1.findAll("tr", { "class" : "row_b" }): 
    for col in row.findAll(re.compile('td')): 
    buf.write(col.string if col.string else '') 

result = buf.getvalue() 
+0

Celui-ci semble fonctionner !!! merci beaucoup =) – Pevo

+0

Qui diable downvoted ceci, et pourquoi? –

-1

Débarrassez-vous de toutes les mentions de GE_DB.

Faire un outputtext = "" vers le début.

Remplacer GE_DB.write(col.string if col.string else '') avec outputtext += col.string if col.string else ''