2017-08-14 4 views
0

Je crée donc une page Web «crawler» qui analyse une page Web, puis recherche un mot ou un ensemble de mots dans la page Web. Voici mon problème, les données que je cherche est contenue dans la page Web analysée (je l'ai couru en utilisant le mot spécifique comme un test) mais il dit que les données qu'il cherche n'a pas été trouvé.Les données de l'analyseur python html ne sont pas trouvées

from html.parser import HTMLParser 
from urllib import * 

class dataFinder(HTMLParser): 
    def open_webpage(self): 
     import urllib.request 
     request = urllib.request.Request('https://www.summet.com/dmsi/html/readingTheWeb.html')#Insert Webpage 
     response = urllib.request .urlopen(request) 
     web_page = response.read() 
     self.webpage_text = web_page.decode() 
     return self.webpage_text 


    def handle_data(self, data): 
     wordtofind = 'PaperBackSwap.com' 
     if data == wordtofind: 
      print('Match found:',data) 
     else: 
      print('No matches found') 



p = dataFinder() 
print(p.open_webpage()) 
p.handle_data(p.webpage_text) 

J'ai exécuter le programme sans la fonction de page Web ouverte en utilisant la méthode d'alimentation et il fonctionne et trouve les données, mais il ne fonctionne plus.

Toute aide dans la résolution de ce problème est apprécié

+0

Quel est exactement ce que vous voulez extraire du site? Liens de tags href? –

+0

J'essaie juste de trouver du texte à partir de la page, que ce soit dans les balises href ou dans les balises p – S0lo

Répondre

1

Vous essayez de comparer la page html et chaîne et bien sûr, ils ne sont pas simillar si vous avez été «Aucun résultat trouvé. Pour trouver une chaîne à l'intérieur d'une chaîne, vous pouvez utiliser la méthode str.find(). Il renvoie la position de la première position trouvée du texte else -1.

code correct:

from html.parser import HTMLParser 
from urllib import * 

class dataFinder(HTMLParser): 
    def open_webpage(self): 
     import urllib.request 
     request = urllib.request.Request('https://www.summet.com/dmsi/html/readingTheWeb.html')#Insert Webpage 
     response = urllib.request .urlopen(request) 
     web_page = response.read() 
     self.webpage_text = web_page.decode() 
     return self.webpage_text 

    def handle_data(self, data): 
     wordtofind = 'PaperBackSwap.com' 
     if data.find(wordtofind) != -1: 
      print('Match found position:', data.find(wordtofind)) 
     else: 
      print('No matches found') 

p = dataFinder() 
print(p.open_webpage()) 
p.handle_data(p.webpage_text) 
+0

Cela fonctionne, et je dois vous remercier de me l'avoir présenté. Je suis relativement novice en programmation et je n'ai donc pas eu l'occasion d'explorer la documentation très à fond, si quelqu'un peut me montrer où, dans la documentation, je serais très reconnaissant. Aussi vous avez dit qu'il renvoie la première position trouvée de celui-ci, y at-il un moyen de l'obtenir pour retourner toutes les positions du mot – S0lo

+0

@ S0lo vous pouvez utiliser cette fonction - http://code.activestate.com/recipes/ 499314-find-all-indices-of-a-substring-in-a-given-string/# c1 pour obtenir toutes les positions de la sous-chaîne. Vous pouvez l'utiliser comme ceci: 'allindices (data, wordtofind)' – Mentos

0

Je suis capable d'analyser et de trouver le texte du contenu html avec beautifulsoup, s'il vous plaît voir si cela fonctionne pour vous. Voici l'exemple de code pour votre cas.

from bs4 import BeautifulSoup 

soup= BeautifulSoup(web_page,'html.parser') 
for s in soup.findAll(wordtofind): 
    if data == wordtofind: 
     print('Match found:',data) 
    else: 
     print('No matches found')