首页 > 解决方案 > Web Scraping 动态网页 Python

问题描述

我正在尝试抓取此页面

我想要描述包含“人口”的所有链接,或者至少页面上的每个链接。

这是我当前的脚本:

    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"

argv[1]我的网址在哪里,是我argv[2]要找的文字 -Populations

到目前为止,它适用于基本的 http 页面。对于这个,漂亮的汤似乎无法从 url 看到结果链接。例如,我看不到以下“汤”:https ://www.insee.fr/fr/statistiques/4265511

如果你能指出一些处理这些“动态”页面的技巧。

标签: pythonpython-3.xweb-scrapingbeautifulsoup

解决方案


该页面使用 JavaScript 加载数据。您可以使用requests模块来模拟它。

例如:

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'])))

印刷:

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

推荐阅读