-1
votes

Extraire du texte entre deux sections variables à l'aide de Python et de belle soupe

Je suis nouveau à Python et j'essayais de faire mon premier projet: Webscraping a Journal scientifique pour rechercher des sujets d'intérêt spécifiques. Dans ce cas, j'aimerais rechercher tous les journaux publiés sous comment nous enseignons par exemple dans cette page Web: https://www.physiologie.org/toc/advances/43/2

Le problème est que les papiers ne sont pas des enfants de comment nous enseignons et sont placés entre deux en-têtes (la seconde peut varier en fonction du problème du magazine). Existe-t-il un moyen d'extraire tout le texte entre deux en-têtes consécutifs?

Voir l'image de ce que je veux extraire ici


1 commentaires

Si vous pouvez mettre en mots ce que vous voulez dire (ainsi que fournir une image au sous-heartage pour mille ;-), vous pouvez y remédier. Ne pouviez-vous pas utiliser la propriété HTML DOM Nextsibling de votre premier en-tête de la TOC et continuez tant que le Nextsibling n'est pas un en-tête de TOC?


3 Réponses :


0
votes

@roadowl a déjà dit que vous pouvez trouver

avec le texte "Comment nous enseignons" puis utilisez Next_siborings (ou Next_sibling () ) Obtenir les éléments suivants. Et vous devez vérifier si l'élément suivant est

xxx


0 commentaires

0
votes

Vous pouvez utiliser : contient code> avec BS4 4.7.1 + et filtrer les divs de soeur qui vient après le prochain H2 code> à partir du H2 code> d'intérêt. Vous avez ensuite tout le parent pertinent div code> s et peut boucler et extraire les informations que vous souhaitez et formater comment vous aimez.

divs = soup.select('h2:contains("HOW WE TEACH") ~ div:not(h2:contains("HOW WE TEACH") ~ h2 ~ div)')


0 commentaires

0
votes

merci à tous!

Ce qui suit permet de faire ce que je voulais faire pour l'instant (il y a toujours des fautes de frappe sur le fichier CSV final, mais au moins cela fonctionne!). Maintenant, je vais commencer à travailler sur la création d'une boucle pour la recherche sur toutes les pages Web "Problèmes". P>

acclamations, P>

from bs4 import BeautifulSoup as bs
import requests

r = requests.get('https://www.physiology.org/toc/advances/43/2')
soup = bs(r.content, 'lxml')

containers = soup.select('h2:contains("HOW WE TEACH") ~ div:not(h2:contains("HOW WE TEACH") ~h2 ~ div)')

containers

containers[0]

#Create file
filename = "papers4.csv"
f = open(filename, "w", encoding='utf-8')
headers = "title, first_author, abstract, hiperligacao, \n"
f.write("headers")

container = containers[0]

#Get title
title = container.h4.a.text

#Get first author
first_author = container.ul.li.text.strip()

#Get abstract
abstract = container.find("div", {"class": "accordion__content toc-item__abstract"})
text_abstract = abstract.p.text.strip()

# Get URL
url = container.p.a.text.strip()

for container in containers:
    title_container = container.h4.a.text
    first_author = container.ul.li.text.strip()
    abstract = container.find("div", {"class": "accordion__content toc-item__abstract"})
    abstract_text = abstract.p.text.strip()
    linkes = container.p.a.text.strip()


    print("title: " + title_container)
    print("first_author: " + first_author)
    print("abstract: " + abstract_text)
    print("hiperligacao: " + linkes) 

f.write(title_container + "|" + first_author + "|" + abstract_text + "|" + linkes + "\n")
f.close()


0 commentaires