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