2012-07-12 1 views
1

SO J'ai un script qui tire des informations à partir d'une page Web d'événement. URL est la suivante: http://everguide.com.au/melbourne/event/2012-jul-14/colour/Impossible d'obtenir PHP pour accepter le signe POUND d'une belle soupe script Python

Ce script php appelle un script python (sa partie d'une boucle):

${"tmp" . $i} = utf8_encode (exec("python myscrape.py ${"eu" . $i}")); 

Il passe une URL. Le script python est le suivant:

# -*- coding: utf-8 -*- 
import sys 
URL = sys.argv[1] 
#$URL = 'http://everguide.com.au/melbourne/event/2012-jul-14/colour/' 

import urllib2 
req = urllib2.Request(URL) 
response = urllib2.urlopen(req) 
html = response.read() 

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(html.decode('utf-8')) 
soup.prettify() 

import re 


for node in soup.findAll(itemprop="name"): 
    n = ''.join(node.findAll(text=True)) 
for node in soup.findAll(itemprop="url"): 
    v = ''.join(node.findAll(text=True)) 

for node in soup.findAll("div", { "class" : "time" }): 
    d = ''.join(node.findAll(text=True)) 

for node in soup.findAll("a", { "id" : "ctl00_holderBody_ctl00_lnkCat" }): 
    c = ''.join(node.findAll(text=True)) 

vu = v 
vu.encode('utf-8', 'xmlcharrefreplace') 
re.escape(vu) 

print n,"|", d,"|", vu,"|", c 

Ce qui fonctionne vraiment bien, mais seulement retourne à la ou le tuyau avant VU - il ne peut pas aller passé!

L'encodage UTF-8 est défini sur tous les fichiers, HTML et php.

Lorsqu'il y a un caractère spécial dans la variable V, il se casse et s'arrête. S'il n'y a pas de caractères spéciaux, cela fonctionne parfaitement.

sortie prévue est:

Colour | 14 July @ 7:30PM | 1000 £ Bend | Clubs & Parties 

Ce ouutput peut être vu lors de l'exécution du script sur le serveur (avec la même commande python) mais sur PHP - je ne peux pas obtenir la chaîne de retour en lieu!

S'il vous plaît aider

Rick

+0

Avez-vous essayé d'ajouter htmlspecialchars aux variables? – Peon

+0

Merci Danis - en plus de la réponse de Maria qui a réglé le problème. Merci beaucoup pour votre aide! – itsricky

Répondre

2

vu.encode retours chaîne encodée ... que vous n'êtes pas attribuer le résultat codé, cela est tout simplement se jeter. Avez-vous essayé

vu = vu.encode('utf-8', 'xmlcharrefreplace')

Vous aurez également besoin de sauter l'évasion comme il gâchera codé unicode.

+0

Merci Maria. Avec la remarque de Dainis à propos de s'assurer que htmlspecialchars() a été mis en place dans toute la boutique dès que les données ont été reçues dans le PHP - vous avez raison, cela fonctionne parfaitement! Je doute que ce problème se soit produit si la documentation de BeautifulSoup fournissait de vrais exemples d'utilisation, plutôt qu'une simple théorie! Merci! – itsricky