Сбор отчетов с веб-сайта с помощью BeautifulSoup в python - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь загрузить отчеты с веб-сайта компании, https://www.investorab.com/investors-media/reports-presentations/. В конце концов, я хотел бы загрузить все доступные отчеты.

У меня почти нет опыта работы с веб-браузером, поэтому у меня возникают некоторые проблемы с определением правильного шаблона поиска. Раньше мне нужно было удалить все ссылки, содержащие файлы PDF, т.е. я мог использовать soup.select ('div [id = "id-name"] a [data-type = "PDF"]'). Но для этого веб-сайта не указан тип данных для ссылок. Как выбрать все ссылки в разделе «Отчет и презентации»? Вот то, что я пробовал, но он возвращает пустой список:

from bs4 import BeautifulSoup
import requests

url = "https://www.investorab.com/investors-media/reports-presentations/"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')

# Select all reports, publication_dates
reports = soup.select('div[class="html not-front not-logged-in no-sidebars page-events-archive i18n-en"] a[href]')
pub_dates = soup.select('div[class="html not-front not-logged-in no-sidebars page-events-archive i18n-en"] div[class="field-content"]')

Я также хотел бы выбрать дату всех публикаций, но в итоге получается пустой список. Приветствуется любая помощь в правильном направлении.

1 Ответ

2 голосов
/ 08 мая 2020

Что вам нужно сделать, так это перебрать страницы, или то, что я сделал, просто перебрал параметр года. Как только вы получите список за год, получите ссылку на каждый отчет, а затем в каждой ссылке найдите ссылку в формате pdf. Затем вы будете использовать эту ссылку pdf для записи в файл:

from bs4 import BeautifulSoup
import requests
import os

# Gets all the links
linkList = []
url = 'https://vp053.alertir.com/v3/en/events-archive?'
for year in range(1917,2021):

    query = 'type%5B%5D=report&type%5B%5D=annual_report&type%5B%5D=cmd&type%5B%5D=misc&year%5Bvalue%5D%5Byear%5D=' + str(year)

    response = requests.get(url + query )
    soup = BeautifulSoup(response.text, 'html.parser')

    links = soup.find_all('a', href=True)
    linkList += [link['href'] for link in links if 'v3' in link['href']]
    print ('Gathered links for year %s.' %year)

# Go to each link and get the pdsf within them
print ('Downloading PDFs...')
for link in linkList:
    url = 'https://vp053.alertir.com' + link
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')

    for pdflink in soup.select("a[href$='.pdf']"):
        folder_location = 'C:/test/pdfDownloads/'
        if not os.path.exists(folder_location):
            os.mkdir(folder_location)

        try:
            filename = os.path.join(folder_location,pdflink['href'].split('/')[-1])
            with open(filename, 'wb') as f:
                f.write(requests.get('https://vp053.alertir.com' + pdflink['href']).content)
                print ('Saved: %s' %pdflink['href'].split('/')[-1])
        except Exception as ex:
             print('%s not saved. %s' %(pdflink['href'],ex))
...