Веб-очищающий питон, не может вызвать определенные теги

Я пытаюсь получить доступ к ссылкам на PDF-файлы с помощью скриптового скрипта. (Моя конечная цель - загрузить PDF-файлы, однако я учусь по ходу дела, и получение ссылок казалось хорошим шагом в рабочем процессе) Доступ к этим файлам ограничен, но у меня есть доступ через VPN. Возможность загрузить pdf доступна в моем браузере, но когда скрипт перебирает страницы, не возвращая ссылки на pdf. Другие данные, такие как названия документов, я могу получить, и они показывают просто отлично. Итак, я предполагаю, что у меня есть способ понять, как работают теги. Эта проблема связана с запросом ссылок на PDF-файлы или использованием VPN для доступа? Я поделюсь сценарием, а также HTML-кодом с сайта, так как вы не сможете получить последний без доступа VPN.

import requests
from bs4 import BeautifulSoup


def elibrary_spider(max_pages):
page = 1
while page <= max_pages:
    if page < 2:
        url = \
            'http://www.elibrary.imf.org/browse?freeFilter=false&fromDate=1986&pageSize=100&sort=date&t_8=urn%3Aeng&toDate=2000&type_0=booksandjournals&redirect=true'
        source_code = requests.get(url)
        plain_text = source_code.text
        soup = BeautifulSoup(plain_text, "html.parser")
        for first in soup.find_all('div', class_='s-pt-2'):
            for second in first('div', class_= 'contentItem nlm-book hasAccess hasCover standardResult chunkResult hi-visible s-px-4 s-py-3 s-bdr-b l-flex l-flex-row'):
                for titlelist in second('div', class_='downloadLinksModule closed'):
                    for ullink in titlelist('ul', class_='types'):
                        for link in ullink('li', class_='pdf'):
                            for pdf in link('a'):
                                href = 'http://www.elibrary.imf.org/' + pdf.get('href')
                                print(href)
        page += 1
        print(page)
        #Subsequent pages have differend url
    if page > 1:
        url = \
            'http://www.elibrary.imf.org/browse?freeFilter=false&fromDate=1986&page=' + str(page) \
            + '&pageSize=100&sort=date&t_8=urn%3Aeng&toDate=2000&type_0=booksandjournals'
        source_code = requests.get(url)
        plain_text = source_code.text
        soup = BeautifulSoup(plain_text, "html.parser")
        for first in soup.find_all('div', class_='s-pt-2'):
            for second in first('div', class_= 'contentItem nlm-book hasAccess hasCover standardResult chunkResult hi-visible s-px-4 s-py-3 s-bdr-b l-flex l-flex-row'):
                for titlelist in second('div', class_='downloadLinksModule closed'):
                    for ullink in titlelist('ul', class_='types'):
                        for link in ullink('li', class_='pdf'):
                            for pdf in link('a'):
                                href = 'http://www.elibrary.imf.org/' + pdf.get('href')
                                print(href)
        page += 1
        print(page)
  elibrary_spider(3)

-Редактировать-

И HTML-код сайта

HTML Tree

Этот действительно работает, он ведет к следующим страницам. Так что запись soup.find_all('div', class_='s-pt-2'): должна быть правильной, верно? (Для этого не нужен VPN)

import requests
from bs4 import BeautifulSoup


#Crawl defined 'browse' page
def elibrary_spider(max_pages):
page = 1
while page <= max_pages:
    if page < 2:
        url = \
            'http://www.elibrary.imf.org/browse?freeFilter=false&fromDate=1986&pageSize=100&sort=date&t_8=urn%3Aeng&toDate=2000&type_0=booksandjournals&redirect=true'
        source_code = requests.get(url)
        plain_text = source_code.text
        soup = BeautifulSoup(plain_text, "html.parser")
        for doclist in soup.find_all('div', class_='s-pt-2'):
            for titlelist in doclist('h2', class_= 'itemTitle'):
                for link in titlelist('a'):
                    href = 'http://www.elibrary.imf.org/' + link.get('href')
                    print(href)
                    get_publication(href)
        page += 1
        print(page)
        #Subsequent pages have differend url
    if page > 1:
        url = \
            'http://www.elibrary.imf.org/browse?freeFilter=false&fromDate=1986&page=' + str(page) \
            + '&pageSize=100&sort=date&t_8=urn%3Aeng&toDate=2000&type_0=booksandjournals'
        source_code = requests.get(url)
        plain_text = source_code.text
        soup = BeautifulSoup(plain_text, "html.parser")
        for doclist in soup.find_all('div', class_='s-pt-2'):
            for titlelist in doclist('h2', class_='itemTitle'):
                for link in titlelist('a'):
                    href = 'http://www.elibrary.imf.org/' + link.get('href')
                    print(href)
                    get_publication(href)
        page += 1
        print(page)

elibrary_spider(3)

0 ответов

Другие вопросы по тегам