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?