Maison > Article > développement back-end > Explication détaillée de la méthode d'exploration vers l'Encyclopédie des choses embarrassantes à l'aide de la technologie d'exploration de Python
C'était la première fois que j'apprenais la technologie des robots d'exploration. J'ai lu une blague sur Zhihu sur la façon d'explorer l'Encyclopédie des choses embarrassantes, alors j'ai décidé d'en créer une moi-même.
Atteignez vos objectifs : 1. Accédez aux blagues de l'Encyclopédie des choses embarrassantes
2. Parcourez un paragraphe à la fois et passez à la page suivante chaque fois que vous appuyez sur Entrée
Implémentation technique : basée sur l'implémentation de python, en utilisant la bibliothèque Requests, la bibliothèque re et la méthode BeautifulSoup de la bibliothèque bs4 pour implémenter
Contenu principal : Tout d'abord, nous devons Clarifions les idées d'implémentation de l'exploration, construisons le corps principalframework. Dans la première étape, nous écrivons d'abord une méthode pour obtenir des pages Web à l'aide de la bibliothèque Requests. Dans la deuxième étape, nous utilisons la méthode BeautifulSoup de la bibliothèque bs4 pour analyser les informations obtenues sur la page Web et utiliser des expressions régulières. pour correspondre aux informations du paragraphe pertinent. La troisième étape consiste à imprimer les informations obtenues. Nous exécutons tous les méthodes ci-dessus via une fonction principale .
1. Tout d'abord, importez les bibliothèques pertinentes
import requests from bs4 import BeautifulSoup import bs4 import re
2. Tout d'abord, obtenez les informations de la page Web
def getHTMLText(url): try: user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent': user_agent} r = requests.get(url,headers = headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return ""
3. analysez-le
soup = BeautifulSoup(html,"html.parser")
Ce dont nous avons besoin, c'est du contenu et de l'éditeur de la blague. En consultant le code source sur la page Web, nous savons que l'éditeur de la blague est :
'p', attrs={'class': 'content'}中<.>Le contenu de la blague est à
'p', attrs={'class': 'author clearfix'}中Nous utilisons donc la méthode de la bibliothèque bs4 pour extraire le contenu spécifique de ces deux balises
def fillUnivlist(lis,li,html,count): soup = BeautifulSoup(html,"html.parser") try: a = soup.find_all('p', attrs={'class': 'content'}) ll = soup.find_all('p', attrs={'class': 'author clearfix'})puis obtenons l'information via des expressions régulières
for sp in a: patten = re.compile(r'<span>(.*?)</span>',re.S) Info = re.findall(patten,str(sp)) lis.append(Info) count = count + 1 for mc in ll: namePatten = re.compile(r'<h2>(.*?)</h2>', re.S) d = re.findall(namePatten, str(mc)) li.append(d)Ce que nous devons noter, c'est que les méthodes find_all et re findall renvoient une liste Lorsque nous utilisons des expressions régulières, nous extrayons seulement grossièrement et ne supprimons pas les sauts de ligne dans les balises
.
Ensuite, il suffit d'ajouter 2. Il suffit de combiner le contenu des listes et de les afficherdef printUnivlist(lis,li,count): for i in range(count): a = li[i][0] b = lis[i][0] print ("%s:"%a+"%s"%b)Ensuite, je crée une fonction de contrôle d'entrée, entrez Q pour renvoyer une erreur, quittez, entrez Entrée pour revenir corriger, et charger la page suivante des paragraphes
def input_enter(): input1 = input() if input1 == 'Q': return False else: return TrueNous réalisons le contrôle d'entrée via la fonction principale. Si la fonction de contrôle renvoie une erreur, la sortie ne sera pas exécutée. Si le retour est correct, le. la sortie continuera. Nous utilisons une
boucle for pour charger la page suivante.
def main(): passage = 0 enable = True for i in range(20): mc = input_enter() if mc==True: lit = [] li = [] count = 0 passage = passage + 1 qbpassage = passage print(qbpassage) url = 'http://www.qiushibaike.com/8hr/page/' + str(qbpassage) + '/?s=4966318' a = getHTMLText(url) fillUnivlist(lit, li, a, count) number = fillUnivlist(lit, li, a, count) printUnivlist(lit, li, number) else: breakIci, nous devons noter que lis[] et li[] seront actualisés à chaque fois que la boucle for est exécutée, afin que le contenu du paragraphe de la page Web puisse être correctement affiché à chaque fois
Voici le code source :
import requests from bs4 import BeautifulSoup import bs4 import re def getHTMLText(url): try: user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent': user_agent} r = requests.get(url,headers = headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "" def fillUnivlist(lis,li,html,count): soup = BeautifulSoup(html,"html.parser") try: a = soup.find_all('p', attrs={'class': 'content'}) ll = soup.find_all('p', attrs={'class': 'author clearfix'}) for sp in a: patten = re.compile(r'(.*?)',re.S) Info = re.findall(patten,str(sp)) lis.append(Info) count = count + 1 for mc in ll: namePatten = re.compile(r'C'est la première fois que je le fais et il y a encore de nombreux domaines qui peuvent être optimisés. J'espère que vous pourrez le signaler.(.*?)
', re.S) d = re.findall(namePatten, str(mc)) li.append(d) except: return "" return count def printUnivlist(lis,li,count): for i in range(count): a = li[i][0] b = lis[i][0] print ("%s:"%a+"%s"%b) def input_enter(): input1 = input() if input1 == 'Q': return False else: return True def main(): passage = 0 enable = True for i in range(20): mc = input_enter() if mc==True: lit = [] li = [] count = 0 passage = passage + 1 qbpassage = passage print(qbpassage) url = 'http://www.qiushibaike.com/8hr/page/' + str(qbpassage) + '/?s=4966318' a = getHTMLText(url) fillUnivlist(lit, li, a, count) number = fillUnivlist(lit, li, a, count) printUnivlist(lit, li, number) else: break main()
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!