DEV Community

pacdev
pacdev

Posted on

Envie de contribuer à des projets open source sur Github ? (1/2)

Web scraping statique avec BeautifulSoup

Récemment j'ai cherché des projets open source auxquels contribuer. L'idéal pour commencer à contribuer est de trouver une issue avec le label good first issue. L'ennui c'est qu'il faut parcourir chaque repo et aller voir dans les issues s'il y en a une avec ce label ou alors aller visiter directement l'url https://github.com/{username}/{repo_name}/contribute

Peut être que j'ai tout simplement mal cherché mais je n'ai pas trouvé de moyens dans github de lister tous les repos ayant ce genre d'issues en fonction d'un filtre de topic. Je me suis donc servi de la deuxième méthode expliquée ci dessus et de la librairie BeautifulSoup pour parcourir automatiquement les repos filtrés par topic et lister les issues avec le label good first issue s'il y en a.

cf. tweet 👇

Ci dessous les quelques étapes qui permettent d'extraire les contenus des pages html:

On créé un objet instance de la classe

soup = BeautifulSoup(html_content, 'html.parser')
Enter fullscreen mode Exit fullscreen mode

html_content est le contenu html de la page obtenu avec un requests.get(url) par exemple

Sur cet objet soup on applique les méthodes de la librairie. Il suffit de repérer dans sa page html statique, quelle est notre cible (F12 par exemple pour obtenir le code source de la page).

Trouver la cible

Le résultat est une liste de dictionnaires qui contiennent les infos de cette balise en particulier. Pour obtenir le lien hypertext il suffit d'aller chercher le contenu href de chaque dictionnaire.

👉 Plus de détail dans le répo

👉 N'hésitez pas à contribuer

Web scraping dynamique

Il y a un ennui. Cette librairie est un outil pour les pages statiques. On ne peut pas interagir avec le site. Quand on applique un filtre par topic dans github explore, on ne récupère qu'une liste de quelques repos avec un bouton load more à la fin

Import dynamique nécessaire

C'est un utilisateur github AlexMihalache99 qui m'a orienté vers la solution

Comment for #2

BeautifulSoup is pulling data out of HTML and XML files.

That means is a static way of extracting data. Because it is static it does not work on webpages that load the results dynamically, for example, your web page that has a load more button instead of a page number bar.

A solution for this is using a library that scrapes the data dynamically.

Selenium is such a library that might satisfy your needs.

MAJ avec selenium

La suite dans une prochaine update

Top comments (0)