boîte à outils-cadre de la boîte à outils-Sprider (acquisition de données) --- stylo-fiction Fun Club

stylos Collecte romans Fun Club, plusieurs packages de base à l'aide de ce qui suit:

demandes: 2.10.0

beautifulsoup4: 4.7.1

où:

1, le journal __ de cadre de base ( « China Shipbuilding a commencé à recueillir le réseau de données ... ») de châssis de base journal __ () est mon paquet de jour comme personnel remplacer l'impression sur elle.

2, la réponse = requests.get (self.base_url, timeout = 30, headers = UserAgent (). Get_random_header (self.base_url)) Ceci est un en- tête d'encapsulation au hasard, est considéré pour empêcher la machine, à chaque fois qu'un nouvel analogue navigateur d' en- tête. Ce code :. UserAgent () get_random_header (self.base_url ) des classes d' en- tête aléatoire: https://blog.csdn.net/zy0412326/article/details/104258491

3, filepath = baseconfig (). CORPUS_ROOT + os.sep + "equipment_info.xlsx" Ceci est le chemin du fichier de baseconfig (). CORPUS_ROOT remplacer leur chemin de fichier sur elle.

4, mmEntity = SpriderEntity () Cette catégorie est pour l'enregistrement d'une entité d'acquisition de données avait, le programme peut être exécuté plusieurs fois. Les stratégies visant à prévenir la duplication de la collecte de données.

Ici , avant d' écrire empêcher la collecte d'articles en double: https://blog.csdn.net/zy0412326/article/details/103224399

Pas un non-sens directement sur le code:

import os 
demandes d'importation 
de BeautifulSoup d'importation BS4 
de SpriderAccess d'importation access.sprider.SpriderAccess 
de base.BaseConfig importation baseconfig 
de l'importation base.BaseFrame cadre de base 
de UserAgent d'importation business.sprider.UserAgent 
de SpriderEntity d'importation object.entity.SpriderEntity 
de plugin.Tools importer des outils 


classe Qula: 
    base_url = "https://www.qu.la/" 
    . save_path = baseconfig () CORPUS_ROOT + os.sep + "Qula" 

    def __init __ (self): 
        Tools.judge_diskpath_exits_create (self.save_path) 
        passe 

    def sprider_story ( auto): 
        châssis de base .__ __ log ( "开始采集笔趣阁排行榜小说...") 
        self.story_url = self.base_url + "paihangbang" 
        essayer: 
            réponse = requests.get (self.story_url, timeout = 30, headers = UserAgent (). get_random_header (self.story_url)) 
            response.encoding = 'UTF-8' 
            soupe = BeautifulSoup (response.text, "html5lib") , 
        sauf exception comme e: 
            châssis de base .__ err __ ( "采集出现错误" + str (e)) 
            passer 
        div_list = soup.findAll ( 'div', attrs = { "classe": '' topbooks }) 
        pour div dans div_list: 
            a_list = div.find_all ( 'a', attrs = { "cible": '_blank'}) 
            pour en a_list: 
                content_url = self.base_url + a.get ( "href") 
                Txt_title = a.get ( "title")
                essayer:
                    réponse = requests.get (content_url, timeout = 30, headers = UserAgent (). get_random_header (content_url)) 
                    response.encoding = 'UTF-8' 
                    soupe = BeautifulSoup (response.text, "html5lib") 
                    dl_tag = soup.find ( 'dl') 
                    a_list = dl_tag.find_all ( 'a') 
                    pour a_tag dans a_list: 
                        href = a_tag.get ( "href") 
                        si "livre" dans href: 
                            url = self.base_url + href 
                            chapter = a_tag.text 

                            mmEntity = SpriderEntity ()
                            mmEntity.sprider_base_url = self.base_url 
                            mmEntity.create_datetime = Tools.get_current_datetime () 
                            mmEntity.sprider_url = url 
                            mmEntity.sprider_pic_title = chapitre 
                            mmEntity.sprider_pic_index = str (1) 
                            si SpriderAccess () query_sprider_entity_by_urlandtitle (URL, chapitre) est Aucun. 
                                SpriderAccess ( ) .save_sprider (mmEntity) 
                                self.get_content (url, chapitre, txt_title) , 
                sauf exception comme e: 
                    de la err __ cadre de base ( "采集" + content_url + "出现错误" + str (e)) 
                    Passe 

            passe 

    DEF get_content (Self, url, chapitre, titre): 
        "" " 
        fichiers d'écriture au texte 
        : url param: acquisition du uRL de 
        : chapitre param: nom de la section 
        : titre de param: nom du roman 
        : retour:
        "" » 
        Essayer: 
            cadre de base .__ journal __ ( "正在采集" + url + "上的小说...") 
            réponse = requests.get (url, timeout = 60, headers = UserAgent () get_random_header (url).) 
            Réponse. encoding = 'UTF-8' 
            soupe = BeautifulSoup (response.text, "html5lib") 
            content = soup.find ( 'div', attrs = { "id": 'content'}) 
            }) Content = chapitre + "\ n" + str (contenu). \
                remplacer ( '<br/>', . '\ n') \ 
                remplacer ( "<script> chaptererror (); </ script>", "") \. 
                <div id = \ "\ content ">", "") \ remplacer (". 
                remplacer ( "</ div>", "") 
            Txt_path = self.save_path + os.sep + str (titre) + "txt" 
            Tools.write_string_to_txt (txt_path, contenu) 
        Sauf exception comme e: 
            châssis de base .__ err __ ( "采集" + chapitre + "出现错误" + str (e) + "尝试重新采集.") 
            Self.get_content (URL, chapitre, titre) 
            passe 


si __name__ == « __main__ « : 
    . Qula () sprider_story () 
passe
Publié 41 articles originaux · a gagné les éloges 9 · vues 8515

Je suppose que tu aimes

Origine blog.csdn.net/zy0412326/article/details/104258585
conseillé
Classement