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&amp;u=12563">port_new_cape</a></td>
    <td class="position"><a href="./search.php?id=12563&amp;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&nbsp;</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?

21
demandé sur halfer 2014-02-05 11:10:53

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)
48
répondu CasualDemon 2017-10-09 15:29:37

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
7
répondu Mark K 2014-02-05 08:12:19

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

6
répondu Tanveer Alam 2014-02-05 12:34:56