Maison >développement back-end >Tutoriel Python >Exemple de capture de données à partir de la page de détails de Sina News

Exemple de capture de données à partir de la page de détails de Sina News

PHP中文网
PHP中文网original
2017-06-21 15:23:291375parcourir

L'article précédent "Python Crawler : Capturer les données de Sina News" expliquait en détail comment explorer les données pertinentes de la page de détails de Sina News, mais la construction du code n'est pas propice à une expansion ultérieure à chaque fois. est récupéré, il doit être réécrit, nous devons donc l'organiser en fonctions afin qu'il puisse être appelé directement.

Six données capturées par la page de détails : titre de l'actualité, nombre de commentaires, heure, source, texte et éditeur en charge.

Tout d'abord, nous organisons le nombre de commentaires dans une représentation fonctionnelle :

 1 import requests 2 import json 3 import re 4  5 comments_url = '{}&group=&compress=0&ie=utf-8&oe=utf-8&page=1&page_size=20' 6  7 def getCommentsCount(newsURL): 8     ID = re.search('doc-i(.+).shtml', newsURL) 9     newsID = ID.group(1)10     commentsURL = requests.get(comments_url.format(newsID))11     commentsTotal = json.loads(commentsURL.text.strip('var data='))12     return commentsTotal['result']['count']['total']13 14 news = ''15 print(getCommentsCount(news))

Ligne 5 comments_url, dans l'article précédent, nous sachez qu'il y a un identifiant d'actualité dans le lien du commentaire, et le nombre de commentaires sur différentes actualités change grâce à la transformation de l'identifiant d'actualité, nous le formatons donc et remplaçons l'identifiant d'actualité par des accolades {}

; acquisition de définition La fonction getCommentsCount du nombre de commentaires utilise des règles régulières pour trouver l'ID d'actualité correspondant, puis stocke le lien d'actualité obtenu dans la variable commentsURL et obtient le nombre final de commentaires commentsTotal en décodant JS

Ensuite , il suffit de saisir Pour un nouveau lien d'actualité, vous pouvez appeler directement la fonction getCommentsCount pour obtenir le nombre de commentaires.

Enfin, nous organisons les 6 données qui doivent être capturées dans une fonction getNewsDetail. Comme suit :

 1 from bs4 import BeautifulSoup 2 import requests 3 from datetime import datetime 4 import json 5 import re 6  7 comments_url = '{}&group=&compress=0&ie=utf-8&oe=utf-8&page=1&page_size=20' 8  9 def getCommentsCount(newsURL):10     ID = re.search('doc-i(.+).shtml', newsURL)11     newsID = ID.group(1)12     commentsURL = requests.get(comments_url.format(newsID))13     commentsTotal = json.loads(commentsURL.text.strip('var data='))14     return commentsTotal['result']['count']['total']15 16 # news = 'http://news.sina.com.cn/c/nd/2017-05-14/doc-ifyfeius7904403.shtml'17 # print(getCommentsCount(news))18 19 def getNewsDetail(news_url):20     result = {}21     web_data = requests.get(news_url)22     web_data.encoding = 'utf-8'23     soup = BeautifulSoup(web_data.text,'lxml')24     result['title'] = soup.select('#artibodyTitle')[0].text25     result['comments'] = getCommentsCount(news_url)26     time = soup.select('.time-source')[0].contents[0].strip()27     result['dt'] = datetime.strptime(time,'%Y年%m月%d日%H:%M')28     result['source'] = soup.select('.time-source span span a')[0].text29     result['article'] = ' '.join([p.text.strip() for p in soup.select('#artibody p')[:-1]])30     result['editor'] = soup.select('.article-editor')[0].text.lstrip('责任编辑:')31     return result32 33 print(getNewsDetail(''))

Dans la fonction getNewsDetail, obtenez les 6 données qui doivent être capturées et mettez-les dans le résultat :

  • result['title'] est d'obtenir le titre de l'actualité,

  • resul['comments'] est d'obtenir le nombre de commentaires, vous peut appeler directement le nombre de commentaires que nous avons défini au début Function getCommentsCount

  • result['dt'] est l'heure d'acquisition result['source'] est la source d'acquisition

  • result['article'] est d'obtenir le texte principal ;

  • result['editor'] est de mettre l'éditeur en charge.

Entrez ensuite le lien d'actualité dont vous souhaitez obtenir les données et appelez cette fonction.

Une partie des résultats en cours :

{'title' : 'L'"instructeur" qui enseigne le Wing Chun au lycée affilié à l'université du Zhejiang est un disciple de troisième génération d'Ip Man', 'commentaires' : 618, 'dt' : datetime.datetime(2017, 5, 14, 7, 22), 'source' : 'China News Network', 'article' : ' Titre original : Le lycée affilié à l'Université du Zhejiang va commencer à enseigner le « professeur » de Wing Chun « Voici Ip Man... Source : Qianjiang Evening News', 'éditeur' : 'Zhang Di'>

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!

Déclaration:
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
Article précédent:Orienté objet avancéArticle suivant:Orienté objet avancé