2013-06-14 5 views
0

Voici un code que j'ai trouvé en ligne qui obtiendra des prix (c'est-à-dire des décimales) de sites Web. J'ai besoin de modifier ce code afin qu'il ne retourne pas un nombre décimal, mais une chaîne.Alter beautifulSoup code pour extraire des mots

from bs4 import BeautifulSoup 
import urllib, string, sys, urllib2, re, time 
start = time.time() 
# Find Bloomberg Brent Price 
rawBloomData = urllib2.urlopen("http://www.bloomberg.com/energy/").read() 
BloomSoup = BeautifulSoup(rawBloomData) 
brent = BloomSoup.findAll('tr')[14] 
BloomPrice = str(re.search(re.compile (r"\d+\.\d*"),str(brent.contents)).group()) 
print (BloomPrice) 

cela retournera le prix du pétrole brut. Je dois saisir le mot à propos de ce qui est "prix". quand je change la ligne de code de

brent = BloomSoup.findAll('tr')[14] 
     to 
brent = BloomSoup.findAll('tr')[12] 

il doit retourner

'Price' 
+0

Quelle est votre question? Vous voulez qu'il retourne "Prix", mais ce n'est pas? Que retourne-t-il réellement? –

+0

@DanielRenshaw Je suis désolé si je vous ai confus. Je veux qu'il renvoie le prix réel du mot. Si vous allez à http://www.bloomberg.com/energy/ vous verrez que sous le mot prix, il y a des prix réels comme 62.03, 65034, etc. Mais je ne veux pas les prix, je veux extraire le mot "Prix" lui-même. – user1681664

+0

Je pense que je l'ai eu, mais vous dites que vous obtenez le prix du mot en changeant l'indice de 14 à 12, alors quel est le problème? –

Répondre

1

Il est juste que cette ligne est toujours à la recherche des nombres décimaux de la forme \d+\.\d*:

BloomPrice = str(re.search(re.compile (r"\d+\.\d*"),str(brent.contents)).group()) 

changement votre code afin qu'il extrait le troisième mot de la chaîne brent à la place.

+0

qui est ce que j'ai des ennuis avec. Je ne sais pas comment. – user1681664

+0

essayez 'brent.findAll ('td')' – Lynn

+0

ça fonctionne, mais pas vraiment. C'est plus loin que là où j'étais si merci. – user1681664

Questions connexes