J'essaie de collecter la date, le titre et le contenu du journal (le New York Times).
date et titre que j'ai obtenu, mais l'article complet que je ne pouvais pas. Ci-dessous, le code que j'ai utilisé pour gratter la date et le titre. P> avec date, titre, je veux aussi gratter l'article complet. P> P>
3 Réponses :
Vous n'observez que la première page de la recherche. Où vous avez la liste des articles. Pour obtenir le contenu de l'article, vous devez envoyer une demande à l'article et récupérer le contenu de là.
Ici, je récupère le titre, l'auteur, la date de publication, le contenu et les stocker dans une liste. Dans cette liste, nous pouvons créer une source de données plus tard, si nécessaire. P>
newyork_times_list = [] for a in search_results.find_all('a', href=True): newyork_times = {} page_url = "https://www.nytimes.com" + a['href'] try: # URL newyork_times['URL'] = page_url # Invoke URL page = requests.get(page_url) page_soup = BeautifulSoup(page.content, 'lxml') # Title newyork_times['Title'] = page_soup.find('title').text # Content page_content = '' page_soup_div = page_soup.find_all("div", {"class":"StoryBodyCompanionColumn"}) for p_content in page_soup_div: page_content = page_content + p_content.text # Content newyork_times['Content'] = page_content # Date Time page_soup_span = page_soup.find_all("time") newyork_times['Publish Date'] = page_soup_span[0].text # Author page_soup_span = page_soup.find_all("span", {"itemprop": "name"}) newyork_times['Author'] = page_soup_span[0].text newyork_times_list.append(newyork_times) print('Processed', page_url) except: print('ERROR!', page_url) print('Done')
Pour gratter des articles de journaux, vous pouvez simplement utiliser une bibliothèque d'oie simple et élégante. Cela vous permet de nettoyer le texte et le titre d'article nettoyés. À ce jour, vous pouvez essayer d'utiliser BEAUXSOUP.
from goose import Goose from requests import get response = get('http://www.nytimes.com/2015/05/19/health/study-finds-dense-breast-tissue-isnt-always-a-high-cancer-risk.html?src=me&ref=general') extractor = Goose() article = extractor.extract(raw_html=response.content) text = article.cleaned_text title = article.title
C'est possible. Vous devrez obtenir chaque lien vers l'article et tirer cela. Je l'ai ajouté ci-dessous et j'ai également nettoyé l'article un peu comme il y avait des espaces supplémentaires et ce qui n'est pas dans le texte lorsque vous vous joignez à tout ensemble. sortie: strong> p>
@ Chitown88 J'essaie de faire la même chose (racler et collecter des articles) de WSJ. Stackoverflow.com/questions/56374425/... Pouvez-vous vérifier le problème? Ce serait d'une grande aide.
@Piyushghasiya, le code à condition qu'il y ait de travail pour moi. Il n'y a rien que je puisse ajouter ou ne pas y changer car ce n'est pas générer d'erreurs et je reçois la sortie souhaitée
@ Chitown88 Je fais presque la même chose. J'ai essayé votre code, mais le show_more.click ne fonctionne pas - une seule page a été raclée. Pourriez-vous peut-être vérifier pourquoi cela ne fonctionnera pas? Le message que j'ai obtenu est: élément cliquez sur intercepté: élément
@Yuepeng je vais jeter un coup d'oeil demain. Il pourrait y avoir une pop up ou quelque chose bloquant l'élément cliquable.
Vous ne pouvez pas obtenir l'article complet des résultats de la recherche. Vous devez obtenir l'URL de l'article à l'aide de la valeur code> href code> de la balise code> A code> et de gratter cette URL séparément.