#100daysofdata

in #100DaysOfCode, #100DaysOfData, #100DaysOfTensorflow

NLP – Fetch data using rss feeds

Getting data for textual analysis should not be limited to scrapping websites. There are many ways to get valuable information from websites, like fetching data from rss feeds.

But rss is not that easy to find anymore. Mostly because, well… who reads it? I do… I still use solutions like Feedly to ready articles, but they do not seem to rely only in rss to fetch the articles.

That being said, today, I will show a simple solution (VERY SIMPLE…) to discover if a website has an exposed feed. There are many ways to discover it. You can read some of them here.

During the next days, I will explore data for at least 1 hour per day and post the notebooks, data and models, when they are available, to this repository.

Today’s notebook can be downloaded here.

Beautifulsoup and feedparser

Beautifulsoup is a python package made for scraping websites. Feedparser is a module for downloading and parsing syndicated feeds and can handle RSS 0.90, Netscape RSS 0.91, Userland RSS 0.91, RSS 0.92, RSS 0.93, RSS 0.94, RSS 1.0, RSS 2.0, Atom 0.3, Atom 1.0, and CDF feeds.

Let’s use them to find a newsfeed on one of my favorite sites: L’info Durable.

# imports 
import requests
from bs4 import BeautifulSoup
import feedparser
import re

After importing, define the homepage of the website as the url to be requested.

# get page using its url
url = 'https://www.linfodurable.fr'
page = requests.get(url)

If request is correctly made, you will receive a 200 response. After checking it worked, let’s look for a feed on the html code.

⚠️ Remember: this is a VERY simplistic way to look for a feed and may return false positives. You should test other ways and validate if the link you are receiving is really a feed.

# check if request was 200
if page.status_code == 200:
    # if so, get soup
    soup = BeautifulSoup(page.text, 'html.parser')  
    # look for a feed
    for a in soup.find_all('a', href = re.compile(r'\.rss|\.xml')):
        if a['href'].startswith('http') == False:
            feed = url + a['href']
            print('Feed is: {}'.format(feed))
        else:
            feed = a['href']
            print('Feed is: {}'.format(feed))
else:
    print('Sorry, couldn\'t find any feed')

If a feed was found, parse it with feedparser.

# parse feed
feed = feedparser.parse(feed)

Check the first entry…

# check the first entry
feed.entries[0]
>>> {'title': 'Ile-de-France: des masques gratuits pour les lycéens, annonce Pécresse',
 'title_detail': {'type': 'text/plain',
  'language': 'fr',
  'base': 'https://www.linfodurable.fr/rss.xml',
  'value': 'Ile-de-France: des masques gratuits pour les lycéens, annonce Pécresse'},
 'links': [{'rel': 'alternate',
   'type': 'text/html',
   'href': 'https://www.linfodurable.fr/ile-de-france-des-masques-gratuits-pour-les-lyceens-annonce-pecresse-19176'}],
 'link': 'https://www.linfodurable.fr/ile-de-france-des-masques-gratuits-pour-les-lyceens-annonce-pecresse-19176',
 'summary': '',
 'summary_detail': {'type': 'text/html',
  'language': 'fr',
  'base': 'https://www.linfodurable.fr/rss.xml',
  'value': ''},
 'published': 'Wed, 22 Jul 2020 06:28:55 +0000',
 'published_parsed': time.struct_time(tm_year=2020, tm_mon=7, tm_mday=22, tm_hour=6, tm_min=28, tm_sec=55, tm_wday=2, tm_yday=204, tm_isdst=0),
 'id': '19176 at https://www.linfodurable.fr',
 'guidislink': False}
# Or get the titles... 
titles = [entry.title for entry in feed.entries]
print(titles)

And get all the titles (or anything else you want to get) present on the feed.

>>> ['Ile-de-France: des masques gratuits pour les lycéens, annonce Pécresse',
 'Miimosa : le financement participatif au service de la transition agricole',
 'Macron à la rencontre de jeunes mercredi à Chambord',
 '"Un guide des bonnes pratiques" pour faire progresser la parité dans l\'industrie',
 '"L’avenir sera ce que nous en ferons"',
 'Volerons-nous avec des avions hybrides électriques en 2028 ?',
 "L'agriculture doit contribuer plus à la production d'énergies (rapport parlementaire)",
 "Recyclez votre vieux téléphone portable en l'envoyant par courrier",
 'Café, fruits et lumière suffisent à faire fuir les moustiques',
 'Gironde : un dirigeable alternatif pour charges lourdes décollera en 2024',
 '1000 km à vélo et en kayak pour sauver la Méditerranée',
 'Trois plateformes pour louer ses vêtements',
 'Lille : Extinction Rebellion déploie 170 m de vêtements contre la fast fashion',
 'En Provence, un arboriculteur produit des fruits en irriguant "de façon raisonnée"',
 'Plus de transparence : l’heure de la\xa0fashion\xa0revolution\xa0a sonné',
 '"L’impact de la mode est plus important que les vols internationaux et le trafic maritime réunis"',
 "Fast fashion : “C'est un secteur où il y a une violation massive des droits humains au travail”",
 "La police de l'environnement part à la rencontre des touristes cet été",
 'Convention climat: "quelques" annonces la semaine prochaine, indique le gouvernement',
 'Erosion côtière: le sénat vote l\'indemnisation des propriétaires du "Signal"',
 'Vosges: un pique-nique pour protester contre le bruit des motos',
 'Francus, des vêtements de sport stylés, éco-responsables et polyvalents !',
 'Réparation : comment faire durer son électroménager ?',
 "Après la crise sanitaire, la filière lin rêve d'une relocalisation en France",
 '8 Français sur 10 sont adeptes des meubles d’occasion',
 'Miel Martine, des miels savoureux français d’exception !',
 'Comment être écologique avec un animal de compagnie ?',
 'Cette marque de cosmétiques coche toutes les cases : bio, végan, zéro déchet',
 'Suppression de la taxe d\'habitation pour les plus riches: le calendrier sera "maintenu", dit Castex',
 'Finistère: port du masque obligatoire sur de nouveaux marchés',
 'Commerce en ligne: Pompili propose un moratoire sur les projets de nouveaux entrepôts',
 'La Moselle et le Doubs placés en alerte à la sécheresse',
 "Jean Castex s'est rendu dans une plateforme du Secours populaire du Val-d'Oise",
 "Près de Nice, des camions d'ordures roulent avec un carburant à base de déchets en plastique",
 'Le concours de gobage de hot dogs passé au crible des maths',
 'La Moselle placée en alerte à la sécheresse',
 'Commerce en ligne: Pompili propose un moratoire sur les projets de nouveaux entrepôts',
 'Trois festivals engagés maintenus à découvrir prochainement',
 'Une plateforme en ligne pour vendre ses surplus de fruits et légumes entre voisins',
 "L'intégration ESG renforcée par la crise sanitaire",
 'La récente canicule en Sibérie "presque impossible" sans le changement climatique',
 'Cinq alternatives aux films et sachets en plastique',
 'Transition écologique: Le Maire "favorable" à une augmentation de l\'enveloppe',
 'Fondation Tara Océan : "Au lieu de jeter les sacs plastiques, mieux vaut les manger"',
 'Atelier populaire : des savons à froid bio aux parfums uniques !',
 'Les cinq annonces de Castex pour la transition écologique',
 'Indépendance, écologie, solidarité et compétences: les quatre volets du plan de relance',
 'Le plan de relance portera un "plan vélo très ambitieux" (Castex)',
 'Aviva Investors : une gamme ISR diversifiée pour les investisseurs en quête de sens',
 "Le plan de relance consacrera 20 milliards d'euros à la rénovation thermique des bâtiments",
 'KIDO, des lampes éco design ludiques et Made in France !',
 'Le méthane, un puissant agent du réchauffement, est en forte hausse',
 "Quand l'économie circulaire devient un argument de vente dans le textile",
 'Vacances : trois activités manuelles et écolos à faire avec les enfants',
 'À Sydney, 100 % des énergies utilisées sont désormais renouvelables',
 'Chine, Nigeria, Inde... Quelles populations en 2100?',
 "Macron annonce 100 milliards d'euros de plus pour une relance tous azimuts",
 'Des microplastiques issus du trafic routier jusque dans les océans selon une étude',
 'Fun’Ethic, des produits cosmétiques éthiques et innovants pour tout âge !',
 'Macron veut inscrire "le plus vite possible" la lutte contre le réchauffement dans la Constitution',
 '"Au moins 100 milliards" d\'euros pour le plan de relance (Macron)',
 'Macron veut "redévelopper massivement" fret ferroviaire, trains de nuit et petites lignes',
 'Macron veut un "grand programme de rénovation" énergétique des écoles et des Ehpad',
 'Macron veut inscrire "le plus vite possible" la lutte contre le réchauffement climatique dans la Constitution',
 'En Ariège, un village entier se convertit aux voitures électriques',
 'Coronavirus: le point sur la pandémie',
 'Macron: "crucial" que l\'Europe s\'empare du dossier méditerranéen',
 'Les canicules africaines très largement ignorées (étude)',
 'Snooze, première marque écoresponsable de céréales gourmandes\u202f!',
 'Cinq alternatives aux pailles en plastique jetables',
 'Louis Vuitton se met au vert, avec des collections homme désormais recyclées',
 'Sept grands fleuves européens pollués par des masques et des gants',
 "À Cassis, les célèbres 2CV roulent désormais à l'électrique",
 "Le foot\xa0comme vecteur de transition pour l'association Football Écologie France",
 'Second Sew, des pièces upcyclées uniques et 100 % responsables pour les tous petits !',
 'Rafraîchir son logement sans climatisation, simplement et à moindre coût',
 'Yann Arthus-Bertrand : "L\'écologie pour mourir avec le sourire"',
 'Les maires écolos seront "des partenaires", assure Barbara Pompili',
 "Alsace: manifestation contre un projet d'entrepôt d'Amazon",
 "Corse: manifestation contre un projet de centre d'enfouissement de déchets",
 'Castex n\'incarne pas le "changement écologique" souhaité, selon Tubiana',
 'Trois idées de transports neutres et insolites',
 "La cueillette de l'arnica réduite à la portion congrue cette année dans les Vosges",
 'Une police de l’environnement va patrouiller dans les zones touristiques',
 'Crise sanitaire: visite express de Castex en Guyane dimanche',
 'Paris: des visites guidées gratuites en "soutien" aux guides conférenciers privés de touristes',
 "Sécheresse: premières limitations d'usage de l'eau en Meurthe-et-Moselle",
 'Un appel à projet pour pérenniser les "coronapistes" pour vélos',
 'Covid-19: 23 cas confirmés à la centrale nucléaire de Belleville-sur-Loire',
 "Lyon: un entrepreneur offre 2 tonnes de haricots bio pour saluer l'arrivée des Verts",
 'A Nantes, un labo traque le Covid sur les côtes françaises',
 'Recyclage des plastiques: Kem One accompagne une nouvelle expérimentation',
 "L'état du littoral s'améliore, mais souffre de l'activité humaine",
 'Vacances : neuf livres écolos à lire cet été pour petits et grands',
 'Le logement reste un ministère "entier", assure sa nouvelle ministre',
 "Crise sanitaire: l'avenir incertain du projet d'extension de l'aéroport de Roissy",
 'Santé: un laboratoire rennais tente de percer les mystères de "l\'exposome"',
 '"Verdir" la publicité: les députés EDS prennent les devants',
 'Les Pays-Bas votent l’abandon du plastique à usage unique en 2021',
 'La Bretagne demande la régionalisation de la PAC']

Insights

Explore other ways to get data. Feeds and APIs may provide almost clean data and save you some pre processing time removing HTML tags and other garbage.


Do you want to connect? It will be a pleasure to discuss Machine Learning with you. Drop me a message on LinkedIn.

Leave a Reply