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 Le problème est que les papiers ne sont pas des enfants de
p>
3 Réponses :
@roadowl a déjà dit que vous pouvez trouver code> avec le texte "Comment nous enseignons" puis utilisez
Next_siborings code> (ou Next_sibling () code >) Obtenir les éléments suivants. Et vous devez vérifier si l'élément suivant est code>
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)')
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()
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 code> de votre premier en-tête de la TOC et continuez tant que le Nextsibling n'est pas un en-tête de TOC?