скачать файл xls с веб-страницы, веб-скребок - PullRequest
0 голосов
/ 05 июня 2019

Я новичок в мире Python и хочу заняться веб-очисткой.

Я хочу загрузить некоторые документы xls со следующего веб-сайта в определенную папку.(например, рабочий стол)

Не могли бы вы помочь мне с этим?

Веб-сайт

https://www.ici.org/research/stats

Я пробовал коды, доступные для подобных вопросовно мне не удалось заставить их работать в моем случае: (

Большое спасибо.

1 Ответ

0 голосов
/ 05 июня 2019

Чтобы использовать BeautifulSoup, сначала нужно понять, как структурирован исходный код HTML.Вы можете найти некоторые основные учебники по этому вопросу с помощью простого поиска в Google.

Но самое основное состоит в том, что HTML-код содержит элементы с tags, а эти теги имеют attributes.Вещи, которые вы ищете, находятся под тегами <a> с соответствующей ссылкой в ​​качестве атрибута href.Поэтому нам нужно найти все теги <a> с атрибутом href с расширением Excel xls.

. Это можно увидеть, проверив страницу (щелкните правой кнопкой мыши на странице и выберитеОсмотрите, или ctrl-shift-I, чтобы открыть панель инструментов разработчика. Затем вы можете щелкнуть вокруг, чтобы найти нужные вам детали с соответствующим HTML-кодом) и просмотреть источник HTML:

enter image description here

После того, как они у вас есть, вы будете перебирать их, чтобы открывать и сохранять.Мы также сделаем это только для тех, в которых «Supplement: Worldwide Public Tables» находится в тексте / контенте для этого тегового элемента.

Просто убедитесь, что выбрали правильный корневой каталог, где вы хотите сохранить его, где написано output = open('C:/path/to/desktop/' + filename, 'wb'):

import os
import requests
from bs4 import BeautifulSoup


desktop = os.path.expanduser("~/Desktop")

url = 'https://www.ici.org/research/stats'

response = requests.get(url)

soup = BeautifulSoup(response.text, 'html.parser')
excel_files = soup.select('a[href*=xls]')

for each in excel_files:
    if 'Supplement: Worldwide Public Tables' in each.text:
        link = 'https://www.ici.org' + each['href']

        filename = each['href'].split('/')[-1]

        if os.path.isfile(desktop + '/' + filename):
            print ('*** File already exists: %s ***' %filename)
            continue

        resp = requests.get(link)
        output = open(desktop + '/' + filename, 'wb')
        output.write(resp.content)
        output.close()
        print ('Saved: %s' %filename)
...