Utilisation de Python et BeautifulSoup (codes source de page Web enregistrés dans un fichier local)
J'utilise Python 2.7 + BeautifulSoup 4.3.2.
J'essaie d'utiliser Python et BeautifulSoup pour récupérer des informations sur une page Web. Parce que la page web est dans le site Web de l'entreprise nécessite une connexion et une redirection, donc je copie les codes source de la page cible dans un fichier et l'enregistre comme "exemple.html " en C: pour la commodité de la pratique.
C'est la partie a des codes originaux:
<tr class="ghj">
<td><span class="city-sh"><sh src="./citys/1.jpg" alt="boy" title="boy" /></span><a href="./membercity.php?mode=view&u=12563">port_new_cape</a></td>
<td class="position"><a href="./search.php?id=12563&sr=positions" title="Search positions">452</a></td>
<td class="details"><div>South</div></td>
<td>May 09, 1997</td>
<td>Jan 23, 2009 12:05 pm </td>
</tr>
Les codes jusqu'à présent que j'ai élaborés sont:
from bs4 import BeautifulSoup
import re
import urllib2
url = "C:example.html"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())
cities = soup.find_all('span', {'class' : 'city-sh'})
for city in cities:
print city
Ce n'est que le premier étape de test si quelque peu pas terminé.
Cependant, quand je l'exécute, il donne un message d'erreur, semble qu'il est incorrect d'utiliser "urllib2.urlopen" pour ouvrir un fichier local.
Traceback (most recent call last):
File "C:Python27Testing.py", line 8, in <module>
page = urllib2.urlopen(url)
File "C:Python27liburllib2.py", line 127, in urlopen
return _opener.open(url, data, timeout)
File "C:Python27liburllib2.py", line 404, in open
response = self._open(req, data)
File "C:Python27liburllib2.py", line 427, in _open
'unknown_open', req)
File "C:Python27liburllib2.py", line 382, in _call_chain
result = func(*args)
File "C:Python27liburllib2.py", line 1247, in unknown_open
raise URLError('unknown url type: %s' % type)
URLError: <urlopen error unknown url type: c>
De quelle manière puis-je pratiquer en utilisant un fichier local?
3 réponses
La meilleure façon d'ouvrir un fichier local avec BeautifulSoup est de lui transmettre un gestionnaire de fichiers ouvert directement. http://www.crummy.com/software/BeautifulSoup/bs4/doc/#making-the-soup
from bs4 import BeautifulSoup
soup = BeautifulSoup(open("C:\\example.html"), "html.parser")
for city in soup.find_all('span', {'class' : 'city-sh'}):
print(city)
Avec L'aide de Chandan, le problème est résolu. le crédit doit aller à lui. :)
Le " urllib2.url" est inutile ici.
from bs4 import BeautifulSoup
import re
import urllib2
url = r"C:\example.html"
page = open(url)
soup = BeautifulSoup(page.read())
cities = soup.find_all('span', {'class' : 'city-sh'})
for city in cities:
print city
Vous pouvez également essayer d'utiliser l'analyseur lxml. Voici un exemple pour vos données html.
from lxml.html import fromstring
import lxml.html as PARSER
data = open('example.html').read()
root = PARSER.fromstring(data)
for ele in root.getiterator():
if ele.tag == "td":
print ele.text_content()
O / p: port_new_cape 452 Sud 09 mai 1997 Jan 23, 2009 12: 05 pm