2017-09-17 1 views
0

Je suis nouveau en python et je suis désolé si ma question est très simple. Dans mon programme, j'ai besoin de pars une page web html et d'extraire tous les liens à l'intérieur. On suppose mon contenu de la page Web est tel que ci-dessous:Pars et l'extrait urls à l'intérieur d'un contenu web html sans utiliser beautifulsoup ou bibliothèques urlib

<html><head><title>Fakebook</title><style TYPE="text/css"><!-- 
#pagelist li { display: inline; padding-right: 10px; } 
--></style></head><body><h1>testwebapp</h1><p><a href="/testwebapp/">Home</a></p><hr/><h1>Welcome to testwebapp</h1><p>Random URLs!</p><ul><li><a href="/testwebapp/847945358/">Rennie Tach</a></li><li><a href="/testwebapp/848854776/">Pid Ko</a></li><li><a href="/testwebapp/850558104/">Ler She</a></li><li><a href="/testwebapp/851635068/">iti Sar</a></li><li><a </ul> 
<p>Page 1 of 2 
<ul id="pagelist"><li> 
1 

</li><li><a href="/testwebapp/570508160/fri/2/">2</a></li><li><a href="/testwebapp/570508160/fri/2/">next</a></li><li><a href="/testwebapp/570508160/fri/2/">last</a></li></ul></p> 
</body></html> 

Maintenant, je dois Pars ce contenu web et extraire tous les liens à l'intérieur de cela. En d'autres mots, j'ai besoin ci-dessous le contenu à extraire de la page Web:

/testwebapp/847945358/ 
/testwebapp/848854776/ 
/testwebapp/850558104/ 
/testwebapp/851635068/ 
/testwebapp/570508160/fri/2/ 
/testwebapp/570508160/fri/2/ 
/testwebapp/570508160/fri/2/ 

Je cherchai beaucoup sur l'analyse syntaxique des pages Web en utilisant python telles que this, this ou this, mais beaucoup d'entre eux ont utilisé des bibliothèques telles que urlib ou urlib2 ou BeautifulSoup et demande que je ne peux pas utiliser ces bibliothèques dans mon programme. Parce que mon application s'exécutera sur une machine que ces bibliothèques n'ont pas été installées sur cela. J'ai donc besoin d'analyser mon contenu Web manuellement. Mon idée était que, je sauve mon contenu de la page Web dans une chaîne, puis-je convertir la chaîne ((séparés par des espaces)) à un tableau de chaînes, puis vérifier chaque élément de mon tableau et si elle a /testwebapp/ ou fri mot-clé, enregistrez cela dans un tableau. Mais quand je me sers ci-dessous commande pour convertir la chaîne contiennent mon contenu de la page Web à un tableau, je suis arrivé cette erreur:

arrayofwords_fromwebpage = (webcontent_saved_in_a_string).split(" ") 

et l'erreur est:

TypeError: a bytes-like object is required, not 'str' 

Y at-il rapide et efficace façon d'analyser et d'extraire ces liens à l'intérieur d'une page Web html sans utiliser de bibliothèque comme urlib, urlib2 ou BeautifulSoup?

Répondre

0

Si tout ce que vous avez besoin est de trouver toute utilisation url que Python, cette fonction vous aidera à:

def search(html): 
    HREF = 'a href="' 
    res = [] 
    s, e = 0, 0 
    while True: 
     s = html.find(HREF, e) 
     if s == -1: 
      break 
     e = html.find('">', s) 
     res.append(html[s+len(HREF):e]) 

    return res 
+0

Ceci est parfait @ AndMar.tnx –

0

Vous pouvez utiliser quelque chose de la bibliothèque standard, à savoir HTMLParser.

I sous-classe pour votre but en regardant pour « un » tags. Lorsque l'analyseur en rencontre un, il recherche l'attribut 'href' et, s'il est présent, il affiche sa valeur. Pour l'exécuter, j'instancie la sous-classe, puis donnez à la méthode feed le code HTML que vous avez présenté dans votre question.

Vous pouvez voir les résultats à la fin de cette réponse.

>>> from html.parser import HTMLParser 
>>> class SharoozHTMLParser(HTMLParser): 
...  def handle_starttag(self, tag, attrs): 
...   if tag == 'a': 
...    attrs = {k: v for (k, v) in attrs} 
...    if 'href' in attrs: 
...     print (attrs['href']) 
...     
>>> parser = SharoozHTMLParser() 
>>> parser.feed(open('temp.htm').read()) 
/testwebapp/ 
/testwebapp/847945358/ 
/testwebapp/848854776/ 
/testwebapp/850558104/ 
/testwebapp/851635068/ 
/testwebapp/570508160/fri/2/ 
/testwebapp/570508160/fri/2/ 
/testwebapp/570508160/fri/2/ 
+0

Merci @Bill Bell, ça va me fonctionner définitivement, je vais l'utiliser. –

+0

Vous êtes les bienvenus. Pourriez-vous me rendre un service et le marquer «accepté»? –

+0

Désolé, je le reprends. Vous n'avez pas remarqué que vous aviez déjà accepté une autre réponse. –