1

I'm trying to scrape this page.

I want all of the links which description contain "Populations", or at least every link on the page.

Here is my current script:

    output = ""
    base_url = argv[1]
    response = requests.get(base_url)
    soup = bs4.BeautifulSoup(response.text, 'html.parser')
    em_box = soup.find_all("", href=True)

    for link in em_box:
        if len(argv) > 2:
            if re.match(argv[2].replace("?", "\xe9"),link.text):
                output += urljoin(base_url, link.get("href")) + "\n"
        else:
            output += urljoin(base_url, link.get("href")) + "\n"

where argv[1] is my url, and argv[2] is the text I am looking for - Populations

It works so far for basic http pages. For this one it seems that beautiful soup is not able to see results links from the url. For example I cannot see my "soup" the following: https://www.insee.fr/fr/statistiques/4265511

If you can point me some tips to deal with these kind of 'dynamic' pages.

1
  • There are many different solution. Type into google "python javascript render scrape". (e.g. stackoverflow.com/questions/8049520/…) You need to let JavaScript render the html page before applying your scraping logic. Commented Jun 15, 2020 at 10:33

1 Answer 1

3

The page uses JavaScript to load the data. You can use requests module to simulate it.

For example:

import json
import requests
import urllib.parse


url = 'https://www.insee.fr/fr/statistiques?q=population+l%C3%A9gale&taille=10000&debut=00&theme=1&categorie=5'

url2 = 'https://www.insee.fr/fr/solr/consultation?q={q}'
document_url = 'https://www.insee.fr/fr/statistiques/{id}'
params = urllib.parse.parse_qs(urllib.parse.urlsplit(url).query)
json_payload = {"q": params['q'][0],"start":"00","sortFields":[{"field":"score","order":"desc"}],"filters":[{"field":"themeId","tag":"tagThemeId","values":params['theme']},{"field":"categorieId","tag":"tagCategorieId","values":params['categorie']},{"field":"rubrique","tag":"tagRubrique","values":["statistiques"]},{"field":"diffusion","values":[True]}],"rows":"10000","facetsQuery":[]}
data = requests.post(url2.format(q=params['q'][0]), json=json_payload).json()

# uncomment this to print all data:
# print(json.dumps(data, indent=4))

for document in data['documents']:
    if 'populations' in document['titre'].lower():
        print('{:<60} {}'.format(document['titre'], document_url.format(id=document['id'])))

Prints:

Populations légales 2017                                     https://www.insee.fr/fr/statistiques/4265511
Populations légales des départements en 2017                 https://www.insee.fr/fr/statistiques/4265390
Populations légales des régions en 2017                      https://www.insee.fr/fr/statistiques/4265384
Populations légales de Nouvelle-Calédonie en 2019            https://www.insee.fr/fr/statistiques/2122859
Populations légales 2015                                     https://www.insee.fr/fr/statistiques/3292701
Populations légales 2014                                     https://www.insee.fr/fr/statistiques/2525768
Populations légales 2016                                     https://www.insee.fr/fr/statistiques/3677855
Populations légales 2008                                     https://www.insee.fr/fr/statistiques/2127739
Populations légales des collectivités d'outre-mer en 2017    https://www.insee.fr/fr/statistiques/4265419
Téléchargement des fichiers par départements des populations légales en 2017 https://www.insee.fr/fr/statistiques/4265439
Téléchargement du fichier d'ensemble des populations légales en 2017 https://www.insee.fr/fr/statistiques/4265429
Populations légales de Mayotte en 2017                       https://www.insee.fr/fr/statistiques/2120838
Les populations légales de Wallis et Futuna en 2018          https://www.insee.fr/fr/statistiques/2121453
Populations légales 2013                                     https://www.insee.fr/fr/statistiques/2119504
Téléchargement des fichiers des populations légales des collectivités d'outre-mer en 2017 https://www.insee.fr/fr/statistiques/4265451
Populations légales des circonscriptions législatives pour les élections de 2017 https://www.insee.fr/fr/statistiques/2508230
Populations légales 2012                                     https://www.insee.fr/fr/statistiques/2119686
Populations légales 2011                                     https://www.insee.fr/fr/statistiques/2119751
Les populations légales de Polynésie française en 2017       https://www.insee.fr/fr/statistiques/2122700
Populations légales 2010                                     https://www.insee.fr/fr/statistiques/2128804
Populations légales 2009                                     https://www.insee.fr/fr/statistiques/2119804
Populations légales 2007                                     https://www.insee.fr/fr/statistiques/2119897
Populations légales 2006                                     https://www.insee.fr/fr/statistiques/2119923
Populations légales des collectivités d'outre-mer en 2015    https://www.insee.fr/fr/statistiques/3545753
Téléchargement du fichier d'ensemble des populations légales en 2015 https://www.insee.fr/fr/statistiques/3545833
Téléchargement des fichiers des populations légales des collectivités d'outre-mer en 2015 https://www.insee.fr/fr/statistiques/3545835
Populations légales des villages des îles Wallis et Futuna en 2008 https://www.insee.fr/fr/statistiques/2121413
Populations légales des districts des îles Wallis et Futuna en 2008 https://www.insee.fr/fr/statistiques/2121094
Populations communales 2006                                  https://www.insee.fr/fr/statistiques/2130410
Populations communales 2006 en ZUS                           https://www.insee.fr/fr/statistiques/2130333
Populations communales 2006 en ZFU                           https://www.insee.fr/fr/statistiques/2130338
Sign up to request clarification or add additional context in comments.

2 Comments

This is perfect ! I was trying to use Tin idea; but you solved my issue. I understand what you did, but can you just explain me how you found this url: url2 = 'insee.fr/fr/solr/consultation?q={q}'. Bravo and thank you very much !
@Pdeuxa I saw this URL when I opened Firefox Developer Tools -> Network tab (and reloaded the page). This url contains all information that is rendered dynamically on the page. (Chrome has something similar too).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.