0
votes

Comment scraper des articles de journaux du site Web à l'aide de SELENIUM et BEAUFOREUP à Python?

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. xxx

avec date, titre, je veux aussi gratter l'article complet.


1 commentaires

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 href de la balise A et de gratter cette URL séparément.


3 Réponses :


0
votes

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')


0 commentaires

0
votes

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


0 commentaires

2
votes

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. xxx

sortie: xxx


4 commentaires

@ 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 ... n'est pas cliquable au point (509, 498)


@Yuepeng je vais jeter un coup d'oeil demain. Il pourrait y avoir une pop up ou quelque chose bloquant l'élément cliquable.