python3 pour créer un robot d'exploration de page amusant

高洛峰
Libérer: 2017-02-14 13:37:00
original
1806 Les gens l'ont consulté

La plupart des tutoriels Python sur Internet sont la version 2.X. Par rapport à python3.X, python2.X a beaucoup changé. J'ai installé python3.X. . Exemple

0x01

Je n'avais rien à faire pendant la Fête du Printemps (comme je suis libre), alors j'ai écrit un programme simple pour lire quelques blagues et enregistrer le processus d'écriture du programme. La première fois que je suis entré en contact avec des robots, c'est lorsque j'ai vu un article comme celui-ci. C'était un article amusant sur l'exploration de photos de filles sur Omelette. Ce n'était pas très pratique. J'ai donc commencé à imiter les chats et les tigres et j'ai pris quelques photos.

La technologie inspire l'avenir. En tant que programmeur, comment pouvez-vous faire une telle chose ? Il est préférable de faire des blagues meilleures pour votre santé physique et mentale.

python3 pour créer un robot dexploration de page amusant

0x02

Avant de retrousser nos manches et de commencer, vulgarisons quelques connaissances théoriques.

Pour faire simple, nous devons dérouler le contenu à un endroit spécifique de la page Web. Comment le dérouler Nous devons d'abord analyser la page Web pour voir quel élément de contenu nous avons. besoin. Par exemple, ce que nous avons exploré cette fois, ce sont les blagues du site Web hilarant. Lorsque nous ouvrons la page des blagues du site Web hilarant, nous pouvons voir beaucoup de blagues. Notre objectif est d'obtenir ces contenus. Revenez vous calmer après l'avoir lu. Si vous continuez à rire comme ça, nous ne pouvons pas écrire de code. Dans Chrome, nous ouvrons Inspecter l'élément, puis développons les balises HTML niveau par niveau, ou cliquons sur la petite souris pour localiser l'élément dont nous avons besoin.

python3 pour créer un robot dexploration de page amusant

Enfin, nous pouvons constater que le contenu de

est la blague dont nous avons besoin. La même chose est vraie lorsque l'on regarde la deuxième blague. . Ainsi, nous pouvons trouver tous les

dans cette page Web, puis extraire le contenu à l'intérieur, et nous avons terminé.

0x03

D'accord, maintenant que nous connaissons notre objectif, nous pouvons retrousser nos manches et commencer. J'utilise python3 ici. Concernant le choix de python2 et python3, chacun peut décider par lui-même. Les deux fonctions peuvent être implémentées, mais il existe de légères différences. Mais il est toujours recommandé d'utiliser python3.
Nous voulons extraire le contenu dont nous avons besoin. Nous devons d'abord extraire cette page Web. Comment la extraire ? Ici, nous devons utiliser une bibliothèque appelée urllib. page Web entière.
Tout d'abord, nous importons urllib


Copier le code Le code est le suivant :

importer urllib.request comme requête

Ensuite, nous pouvons utiliser la requête pour obtenir la page Web,


Copiez le code Le code est le suivant :

def getHTML(url ):
return request.urlopen(url).read()

La vie est courte, j'utilise python, une ligne de code, je télécharge des pages Web, tu as dit, là ce n'est pas une raison pour ne pas utiliser python.
Après avoir téléchargé la page Web, nous devons analyser la page Web pour obtenir les éléments dont nous avons besoin. Afin d'analyser les éléments, nous devons utiliser un autre outil appelé Beautiful Soup. En l'utilisant, nous pouvons analyser rapidement le HTML et le XML et obtenir les éléments dont nous avons besoin.


Copier le code Le code est le suivant :

soup = BeautifulSoup(getHTML("http://www.pengfu. com/xiaohua_1 .html"))

Utiliser BeautifulSoup pour analyser des pages Web n'est qu'une phrase, mais lorsque vous exécutez le code, un avertissement apparaîtra, vous invitant à spécifier un analyseur. Sinon, cela risque de ne pas fonctionner sur d'autres plateformes ou Une erreur est signalée sur le système.


Copier le code Le code est le suivant :

/Library/Frameworks/Python.framework/Versions/3.5/lib/ python3.5 /site-packages/bs4/__init__.py:181 : UserWarning : aucun analyseur n'a été explicitement spécifié, j'utilise donc le meilleur analyseur HTML disponible pour ce système ("lxml"). , mais si vous exécutez ce code sur un autre système, ou dans un environnement virtuel différent, il peut utiliser un analyseur différent et se comporter différemment.

Le code qui a provoqué cet avertissement se trouve à la ligne 64 du fichier joke.py . Pour vous débarrasser de cet avertissement, remplacez le code qui ressemble à ceci :

BeautifulSoup([votre balisage])

par ceci :

BeautifulSoup([votre balisage], "lxml" )

markup_type=markup_type))

Les types d'analyseurs et les différences entre les différents analyseurs sont expliqués en détail dans les documents officiels. À l'heure actuelle, il est plus fiable d'utiliser l'analyse lxml. .
Après modification


Copiez le code Le code est le suivant :

soup = BeautifulSoup(getHTML("http: //www.pengfu.com/xiaohua_1.html", 'lxml'))

De cette façon, il n'y aura aucun avertissement ci-dessus.


Copier le code Le code est le suivant :

p_array = soup.find_all('p', {'class' : "content- img clearfix pt10 relative"})

Utilisez la fonction find_all pour trouver toutes les balises p de class = content-img clearfix pt10 relative puis parcourez ce tableau


Copier le code Le code est le suivant :

pour x dans p_array : content = x.string

De cette façon, on obtient le contenu de la destination p. À ce stade, nous avons atteint notre objectif et atteint notre plaisanterie.
Mais lors de l'exploration de la même manière, une telle erreur sera signalée


Copiez le code Le code est le suivant :

raise RemoteDisconnected("Connexion fermée à distance sans" http.client.RemoteDisconnected : Connexion fermée à distance sans réponse

Il indique que l'extrémité distante ne répond pas, a fermé le lien et a vérifié le réseau et il n'y a pas de problème. Quelle est la cause de cela ? Ma posture est-elle mauvaise ?
Il n'y a pas de réponse lorsque j'ouvre Charles pour capturer le paquet. Pourquoi le navigateur ne peut-il pas y accéder ? avec UA ? Après avoir regardé Charles, j'ai découvert que pour les requêtes initiées à l'aide de urllib, la valeur par défaut de UA est Python-urllib/3.5 et lors de l'accès à UA dans Chrome, il s'agit de User-Agent : Mozilla/5.0 (Macintosh ; Intel Mac OS X 10_12_3). ) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/56.0.2924.87 Safari/537.36, est-ce dû au fait que le serveur rejette le robot d'exploration python basé sur UA ? Essayons-le sous un déguisement et voyons si cela fonctionne


Copier le code Le code est le suivant :

def getHTML(url):
headers = {'User-Agent': 'User-Agent :Mozilla /5.0 (Macintosh; Intel Mac OS .urlopen(req).read()

De cette façon, python est déguisé en chrome pour obtenir la page Web de Qibai, et les données peuvent être obtenues en douceur.

À ce stade, python est utilisé pour explorer Qibaihe. Les blagues sur Pangbelly.com sont terminées. Il suffit d'analyser les pages Web correspondantes, de trouver les éléments qui nous intéressent et d'utiliser les puissantes fonctions de python. pour atteindre nos objectifs. Qu'il s'agisse de photos XXOO ou de blagues à connotation, on peut le faire en un clic, je ne parlerai plus, je vais chercher des photos de filles.

# -*- coding: utf-8 -*-
import sys
import urllib.request as request
from bs4 import BeautifulSoup

def getHTML(url):
  headers = {'User-Agent': 'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
  req = request.Request(url, headers=headers)
  return request.urlopen(req).read()

def get_pengfu_results(url):
  soup = BeautifulSoup(getHTML(url), 'lxml')
  return soup.find_all('p', {'class':"content-img clearfix pt10 relative"})

def get_pengfu_joke():
  for x in range(1, 2):
    url = 'http://www.pengfu.com/xiaohua_%d.html' % x
    for x in get_pengfu_results(url):
      content = x.string
      try:
        string = content.lstrip()
        print(string + '\n\n')
      except:
        continue
  return

def get_qiubai_results(url):
  soup = BeautifulSoup(getHTML(url), 'lxml')
  contents = soup.find_all('p', {'class':'content'})
  restlus = []
  for x in contents:
    str = x.find(&#39;span&#39;).getText(&#39;\n&#39;,&#39;<br/>&#39;)
    restlus.append(str)
  return restlus

def get_qiubai_joke():
  for x in range(1, 2):
    url = &#39;http://www.qiushibaike.com/8hr/page/%d/?s=4952526&#39; % x
    for x in get_qiubai_results(url):
      print(x + &#39;\n\n&#39;)
  return

if __name__ == &#39;__main__&#39;:
  get_pengfu_joke()
  get_qiubai_joke()
Copier après la connexion

Pour plus de production python3 de robots d'exploration de pages Web amusants et d'articles connexes, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal