Tutoriel d'exemple d'article d'exploration Python

巴扎黑
Libérer: 2017-08-07 17:37:45
original
1797 Les gens l'ont consulté

Cet article vous présente principalement les informations pertinentes sur l'utilisation de Python pour explorer des articles sur un site Web en prose. L'introduction de l'article est très détaillée et a une certaine valeur de référence et d'apprentissage pour tous les amis qui en ont besoin peuvent y jeter un œil ci-dessous.

Cet article vous présente principalement le contenu pertinent sur les articles du réseau de prose d'exploration Python. Il est partagé pour votre référence et votre étude. Jetons un coup d'œil à l'introduction détaillée :

<.>Le rendu est le suivant :


Configurer python 2.7


 bs4

 requests
Copier après la connexion
Installer à l'aide de pip

sudo pip install bs4


sudo pip install requests
Copier après la connexion
Une brève explication de l'utilisation de bs4. Puisqu'il explore des pages Web, j'ai une brève explication de l'utilisation de bs4. présentera find et find_all.

La différence entre find et find_all est que ce qui est renvoyé est différent. Find renvoie la première balise correspondante et le contenu de la balise

find_all renvoie une liste<🎜. >

Par exemple, nous écrivons un test.html pour tester la différence entre find et find_all.

Le contenu est :


Ensuite, le code de test.py est :
<html>
<head>
</head>
<body>
<p id="one"><a></a></p>
<p id="two"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >abc</a></p>
<p id="three"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >three a</a><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >three a</a><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >three a</a></p>
<p id="four"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >four<p>four p</p><p>four p</p><p>four p</p> a</a></p>
</body>
</html>
Copier après la connexion


Après l'exécution, nous pouvons voir le résultat. Lors de l'obtention de la balise spécifiée, il n'y a pas beaucoup de différence entre les deux. Lors de l'obtention d'un groupe de balises, la différence entre les deux sera affichée. .
from bs4 import BeautifulSoup
import lxml

if __name__==&#39;__main__&#39;:
 s = BeautifulSoup(open(&#39;test.html&#39;),&#39;lxml&#39;)
 print s.prettify()
 print "------------------------------"
 print s.find(&#39;p&#39;)
 print s.find_all(&#39;p&#39;)
 print "------------------------------"
 print s.find(&#39;p&#39;,id=&#39;one&#39;)
 print s.find_all(&#39;p&#39;,id=&#39;one&#39;)
 print "------------------------------"
 print s.find(&#39;p&#39;,id="two")
 print s.find_all(&#39;p&#39;,id="two")
 print "------------------------------"
 print s.find(&#39;p&#39;,id="three")
 print s.find_all(&#39;p&#39;,id="three")
 print "------------------------------"
 print s.find(&#39;p&#39;,id="four")
 print s.find_all(&#39;p&#39;,id="four")
 print "------------------------------"
Copier après la connexion


Nous devons donc faire attention à ce que nous voulons lors de son utilisation, sinon une erreur se produira


L'étape suivante. est d'obtenir des informations sur la page Web via des demandes. Je ne comprends pas très bien les autres. Pourquoi écrire entendu et autres choses


J'accède directement à la page Web, j'obtiens plusieurs pages Web secondaires classées de Prose Network ? via la méthode get, puis passez un test de groupe pour explorer toutes les pages Web


Dans cette partie du code, je n'ai pas traité le
def get_html():
 url = "https://www.sanwen.net/"
 two_html = [&#39;sanwen&#39;,&#39;shige&#39;,&#39;zawen&#39;,&#39;suibi&#39;,&#39;rizhi&#39;,&#39;novel&#39;]
 for doc in two_html:
 i=1
  if doc==&#39;sanwen&#39;:
  print "running sanwen -----------------------------"
  if doc==&#39;shige&#39;:
  print "running shige ------------------------------"
  if doc==&#39;zawen&#39;:
  print &#39;running zawen -------------------------------&#39;
  if doc==&#39;suibi&#39;:
  print &#39;running suibi -------------------------------&#39;
  if doc==&#39;rizhi&#39;:
  print &#39;running ruzhi -------------------------------&#39;
  if doc==&#39;nove&#39;:
  print &#39;running xiaoxiaoshuo -------------------------&#39;
 while(i<10):
 par = {&#39;p&#39;:i}
 res = requests.get(url+doc+&#39;/&#39;,params=par)
 if res.status_code==200:
  soup(res.text)
  i+=i
Copier après la connexion
. ce n'est pas 200. Le problème qui en résulte est que l'erreur ne sera pas affichée et que le contenu analysé sera perdu. Ensuite, j'ai analysé la page Web de Sanwen.net/rizhi/&p=1

res.status_code
La valeur maximale de p est de 10. Je ne comprends pas. La dernière fois que j'ai exploré le disque, il y avait 100 pages. . Oubliez-le et analysez-le plus tard. Récupérez ensuite le contenu de chaque page via la méthode get.


Après avoir obtenu le contenu de chaque page, vous analysez l'auteur et le titre. Le code est comme ça


Il y a un. chose de triche lors de l'obtention du titre. , je voudrais vous demander pourquoi vous ajoutez des barres obliques dans le titre de votre prose, non seulement une mais aussi deux. Ce problème a directement provoqué une erreur dans le nom du fichier lorsque j'ai écrit le fichier plus tard. j'ai donc écrit une expression régulière et je vous la donnerai. Changez de carrière.
def soup(html_text):
 s = BeautifulSoup(html_text,&#39;lxml&#39;)
 link = s.find(&#39;p&#39;,class_=&#39;categorylist&#39;).find_all(&#39;li&#39;)
 for i in link:
 if i!=s.find(&#39;li&#39;,class_=&#39;page&#39;):
 title = i.find_all(&#39;a&#39;)[1]
 author = i.find_all(&#39;a&#39;)[2].text
 url = title.attrs[&#39;href&#39;]
 sign = re.compile(r&#39;(//)|/&#39;)
 match = sign.search(title.text)
 file_name = title.text
 if match:
 file_name = sign.sub(&#39;a&#39;,str(title.text))
Copier après la connexion


La dernière étape consiste à obtenir le contenu en prose. Grâce à l'analyse de chaque page, nous obtenons l'adresse de l'article, puis obtenons directement le contenu. Je voulais à l'origine l'obtenir un par un en le modifiant. l'adresse Web, ce qui évite des ennuis.


Enfin, écrivez le fichier et enregistrez-le ok
def get_content(url):
 res = requests.get(&#39;https://www.sanwen.net&#39;+url)
 if res.status_code==200:
 soup = BeautifulSoup(res.text,&#39;lxml&#39;)
 contents = soup.find(&#39;p&#39;,class_=&#39;content&#39;).find_all(&#39;p&#39;)
 content = &#39;&#39;
 for i in contents:
 content+=i.text+&#39;\n&#39;
 return content
Copier après la connexion


Trois fonctions pour obtenir le réseau de prose Prose, mais il y a un problème. Le problème est que je ne sais pas pourquoi une certaine prose est perdue. Je ne peux obtenir qu'environ 400 articles. C'est très différent des articles sur Prose.com, mais c'est effectivement obtenu. page par page. J'espère que quelqu'un pourra m'aider avec ce problème. Peut-être devrions-nous rendre la page Web inaccessible. Bien sûr, je pense que cela a quelque chose à voir avec le réseau cassé dans mon dortoir
 f = open(file_name+&#39;.txt&#39;,&#39;w&#39;)

 print &#39;running w txt&#39;+file_name+&#39;.txt&#39;
 f.write(title.text+&#39;\n&#39;)
 f.write(author+&#39;\n&#39;)
 content=get_content(url) 
 f.write(content)
 f.close()
Copier après la connexion


J'ai presque oublié le rendu.
 f = open(file_name+&#39;.txt&#39;,&#39;w&#39;)
 print &#39;running w txt&#39;+file_name+&#39;.txt&#39;
 f.write(title.text+&#39;\n&#39;)
 f.write(author+&#39;\n&#39;)
 content=get_content(url) 
 f.write(content)
 f.close()
Copier après la connexion


Il peut y avoir un phénomène de timeout. Je peux seulement dire que vous devez choisir une bonne connexion Internet lorsque vous allez à l'université !

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!

É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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!