Maison >développement back-end >Tutoriel Python >Exemple de capture de données à partir de la page de détails de Sina News
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
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!