【问题标题】:WebScraping for downloading certain .csv files用于下载某些 .csv 文件的 WebScraping
【发布时间】:2021-12-25 20:47:21
【问题描述】:

我有这个问题。正如标题所说,我需要从网站下载某些 .csv 文件,但我在这样做时遇到了麻烦。我对编程非常陌生,尤其是这个主题(网络抓取)

from bs4 import BeautifulSoup as BS
import requests

DOMAIN = 'https://datos.gob.ar'
URL = 'https://datos.gob.ar/dataset/cultura-mapa-cultural-espacios-culturales/'
FILETYPE = ".csv"


def get_soup(url):
    return BS(requests.get(url).text, 'html.parser')


for link in get_soup(URL).find_all('a'):
    file_link = link.get('href')
    if FILETYPE in file_link:
        print(file_link)

此代码显示所有可用的 .csv 文件,但我只需要下载以 "biblioteca Popular.csv" 、 "cine.csv" 和 "museos.csv" 结尾的文件

也许这是一个非常简单的任务,但我找不到

https://datos.cultura.gob.ar/dataset/37305de4-3cce-4d4b-9d9a-fec3ca61d09f/resource/456d1087-87f9-4e27-9c9c-1d9734c7e51d/download/biblioteca_especializada.csv

https://datos.cultura.gob.ar/dataset/37305de4-3cce-4d4b-9d9a-fec3ca61d09f/resource/01c6c048-dbeb-44e0-8efa-6944f73715d7/download/biblioteca_popular.csv

https://datos.cultura.gob.ar/dataset/37305de4-3cce-4d4b-9d9a-fec3ca61d09f/resource/8d0b7f33-d570-4189-9961-9e907193aebc/download/casas_bicentenario.csv

https://datos.cultura.gob.ar/dataset/37305de4-3cce-4d4b-9d9a-fec3ca61d09f/resource/4207def0-2ff7-41d5-9095-d42ae8207a5d/download/museos.csv

https://datos.cultura.gob.ar/dataset/37305de4-3cce-4d4b-9d9a-fec3ca61d09f/resource/392ce1a8-ef11-4776-b280-6f1c7fae16ae/download/cine.csv

https://datos.cultura.gob.ar/dataset/37305de4-3cce-4d4b-9d9a-fec3ca61d09f/resource/87ebac9c-774c-4ef2-afa7-044c41ee4190/download/teatro.csv

【问题讨论】:

    标签: web-scraping request


    【解决方案1】:

    您可以提取包含该信息的 JavaScript 对象,否则这些信息将被加载到您看到的位置(如果在浏览器中运行的 JavaScript)。然后,您需要进行一些 Unicode 代码点清理和字符串清理并解析为 JSON。您可以使用关键字列表从所需的 url 中进行选择。

    @Mark Tolonen的Unicode清理方法

    import json
    import requests
    import re
    
    URL = 'https://datos.gob.ar/dataset/cultura-mapa-cultural-espacios-culturales/'
    
    r = requests.get(URL)
    search = ["Bibliotecas Populares", "Salas de Cine", "Museos"]
    s = re.sub( r'\n\s{2,}', '', re.search(r'"@graph": (\[[\s\S]+{0}[\s\S]+)}}'.format(search[0]), r.text).group(1))
    data = json.loads(re.sub(r'\\"', '', re.sub(r'\\u([0-9a-fA-F]{4})',lambda m: chr(int(m.group(1),16)),s)))
    
    for i in data:
        if 'schema:name' in i:
            name = i['schema:name']
            if name in search:
                print(name)
                print(i['schema:url'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      相关资源
      最近更新 更多