Maison > développement back-end > Tutoriel Python > [Python] Web crawler (8) : Code source et analyse du web crawler (v0.3) de l'Encyclopedia of Embarrassments (mise à jour simplifiée)

[Python] Web crawler (8) : Code source et analyse du web crawler (v0.3) de l'Encyclopedia of Embarrassments (mise à jour simplifiée)

黄舟
Libérer: 2017-01-21 14:31:05
original
1511 Les gens l'ont consulté

Questions et réponses :

1. Pourquoi cela indique-t-il que l'Encyclopédie des choses embarrassantes est indisponible pendant un certain temps ?

Réponse : Il y a quelque temps, l'Encyclopédie des Embarras a ajouté un test Header, ce qui rendait impossible l'exploration. Il est nécessaire de simuler le Header dans le code. Le code a maintenant été modifié et peut être utilisé normalement.


2. Pourquoi devez-vous créer un fil de discussion séparé ?

R : Le processus de base est le suivant : le robot démarre un nouveau fil de discussion en arrière-plan et explore deux pages de l'Encyclopédie des choses embarrassantes. S'il reste moins de deux pages, il explore une autre page. Lorsque les utilisateurs appuient sur Entrée, ils obtiennent uniquement le contenu le plus récent de l'inventaire au lieu d'aller en ligne, ce qui rend la navigation plus fluide. Vous pouvez également placer le chargement dans le thread principal, mais cela entraînera un problème de long temps d'attente pendant le processus d'exploration.

Contenu du projet :

Un robot d'exploration Web pour l'Encyclopédie des choses embarrassantes écrite en Python.

Utilisation :

Créez un nouveau fichier Bug.py, copiez-y le code et double-cliquez pour l'exécuter.

Fonctions du programme :

Parcourez l'Encyclopédie des choses embarrassantes dans l'invite de commande.

Explication du principe :

Tout d'abord, parcourez la page d'accueil de Embarrassing Encyclopedia : http://www.qiushibaike.com/hot/page/1

D'accord. On peut voir que le numéro après la page/dans le lien est le numéro de page correspondant. N'oubliez pas ceci pour préparer les écrits futurs.

Ensuite, faites un clic droit pour afficher le code source de la page :

[Python] Web crawler (8) : Code source et analyse du web crawler (v0.3) de lEncyclopedia of Embarrassments (mise à jour simplifiée)

L'observation a révélé que chaque paragraphe est marqué d'un div, où la classe doit être contenue et title est l’heure de publication, il suffit d’utiliser des expressions régulières pour la « déduire ».

Après avoir compris le principe, le reste est le contenu des expressions régulières. Vous pouvez vous référer à ce billet de blog :

http://blog.csdn.net/wxg694175346/article/details/. 8929576


Effet d'opération :

[Python] Web crawler (8) : Code source et analyse du web crawler (v0.3) de lEncyclopedia of Embarrassments (mise à jour simplifiée)

# -*- coding: utf-8 -*-    
     
import urllib2    
import urllib    
import re    
import thread    
import time    
  
    
#----------- 加载处理糗事百科 -----------    
class Spider_Model:    
        
    def __init__(self):    
        self.page = 1    
        self.pages = []    
        self.enable = False    
    
    # 将所有的段子都扣出来,添加到列表中并且返回列表    
    def GetPage(self,page):    
        myUrl = "http://m.qiushibaike.com/hot/page/" + page    
        user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'   
        headers = { 'User-Agent' : user_agent }   
        req = urllib2.Request(myUrl, headers = headers)   
        myResponse = urllib2.urlopen(req)  
        myPage = myResponse.read()    
        #encode的作用是将unicode编码转换成其他编码的字符串    
        #decode的作用是将其他编码的字符串转换成unicode编码    
        unicodePage = myPage.decode("utf-8")    
    
        # 找出所有class="content"的div标记    
        #re.S是任意匹配模式,也就是.可以匹配换行符    
        myItems = re.findall(&#39;<div.*?class="content".*?title="(.*?)">(.*?)</div>&#39;,unicodePage,re.S)    
        items = []    
        for item in myItems:    
            # item 中第一个是div的标题,也就是时间    
            # item 中第二个是div的内容,也就是内容    
            items.append([item[0].replace("\n",""),item[1].replace("\n","")])    
        return items    
    
    # 用于加载新的段子    
    def LoadPage(self):    
        # 如果用户未输入quit则一直运行    
        while self.enable:    
            # 如果pages数组中的内容小于2个    
            if len(self.pages) < 2:    
                try:    
                    # 获取新的页面中的段子们    
                    myPage = self.GetPage(str(self.page))    
                    self.page += 1    
                    self.pages.append(myPage)    
                except:    
                    print &#39;无法链接糗事百科!&#39;    
            else:    
                time.sleep(1)    
            
    def ShowPage(self,nowPage,page):    
        for items in nowPage:    
            print u&#39;第%d页&#39; % page , items[0]  , items[1]    
            myInput = raw_input()    
            if myInput == "quit":    
                self.enable = False    
                break    
            
    def Start(self):    
        self.enable = True    
        page = self.page    
    
        print u&#39;正在加载中请稍候......&#39;    
            
        # 新建一个线程在后台加载段子并存储    
        thread.start_new_thread(self.LoadPage,())    
            
        #----------- 加载处理糗事百科 -----------    
        while self.enable:    
            # 如果self的page数组中存有元素    
            if self.pages:    
                nowPage = self.pages[0]    
                del self.pages[0]    
                self.ShowPage(nowPage,page)    
                page += 1    
    
    
#----------- 程序的入口处 -----------    
print u"""  
---------------------------------------  
   程序:糗百爬虫  
   版本:0.3  
   作者:why  
   日期:2014-06-03  
   语言:Python 2.7  
   操作:输入quit退出阅读糗事百科  
   功能:按下回车依次浏览今日的糗百热点  
---------------------------------------  
"""  
    
    
print u&#39;请按下回车浏览今日的糗百内容:&#39;    
raw_input(&#39; &#39;)    
myModel = Spider_Model()    
myModel.Start()
Copier après la connexion

Ce qui précède est le robot d'exploration Web [Python] (8 ) : Contenu du code source du robot d'exploration Web (v0.3) et analyse (mise à jour simplifiée) de l'Encyclopédie des choses embarrassantes. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !


É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