Веб-очищающий питон, не может вызвать определенные теги
Я пытаюсь получить доступ к ссылкам на 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-код сайта
Этот действительно работает, он ведет к следующим страницам. Так что запись 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)