Я пытаюсь извлечь все статьи в формате pdf, используя API из ядра (сборник статей открытого доступа). У меня есть 2 версии. Один из них такой:
import requests
import time
import sys
import os
import validators
import urllib.request
from bs4 import BeautifulSoup
import pandas as pd
def download_file():
for i in range(1, 5):
url = 'https://core.ac.uk:443/api-v2/articles/'
query = 'search/(needs%20OR%20requirements)%20AND%20(smart%20irrigation%20OR%20smart%20irrigation%20system%20)%20AND%20crops%20AND%20(smallholder%20OR%20rural)AND%20(internet%20of%20things%20OR%20IoT)?'
language = 'language=en&'
year = 'from_Year=2015&to_Year=2019'
page = 'page={}&'.format(i)
pageSize = 'pageSize=100&'
data_query = 'metadata=false&fulltext=false&citations=false&similar=false&duplicate=false&urls=true&faithfulMetadata=false&'
apiKey = 'apiKey=AEzF5ei2TfnsCmpSR8yHIv6NoPakwYr9'
response = requests.get(url + query + language + year + page + pageSize + data_query + apiKey)
time.sleep(1)
if response.status_code != 200:
print('No es posible tener respuesta del servidor {}'.format(i))
else:
json_data = response.json()
df = pd.DataFrame(json_data['data'])
for index, row in df.iterrows():
file_name = str(row['id'] + '.pdf')
val_boolean = validators.url(row['fulltextIdentifier'])
if val_boolean == True:
print('Descargando el documento {}'.format(file_name))
with open(file_name, 'wb') as file_pdf:
url = requests.get(row['fulltextIdentifier'])
file_pdf.write(url.content)
print('Descarga completada '.format(i))
if __name__ == '__main__':
download_file()
в начале кажется работающим, но я заметил, что он не получает все PDF-файлы. Он продолжает циклически повторять одни и те же 100 статей с первой страницы снова и снова с 1 по 5, он не хочет go за пределами первой страницы, что я делаю не так? Как я могу сделать так, чтобы это было oop правильным способом? Мне нужно получить около 10000 статей.
до версии 2 Я хотел сделать то же самое, но получил ошибку:
import requests
from urllib.parse import urljoin
url = 'https://core.ac.uk:443/api-v2/articles/'
query = 'search/(needs%20OR%20requirements)%20AND%20(smart%20irrigation%20OR%20smart%20irrigation%20system%20)%20AND%20crops%20AND%20(smallholder%20OR%20rural)AND%20(internet%20of%20things%20OR%20IoT)?'
language = 'language=en&'
year = 'from_Year=2015&to_Year=2019'
page = 'page=1&'
pageSize = 'pageSize=100&'
data_query = 'metadata=false&fulltext=false&citations=false&similar=false&duplicate=false&urls=true&faithfulMetadata=false&'
apiKey = 'apiKey=AEzF5ei2TfnsCmpSR8yHIv6NoPakwYr9'
url_request = (url + query + language + year + page + pageSize + data_query + apiKey)
response = requests.get(url_request).json()
for file in response['data']:
url_request=file(response['data'][file].get('fulltextIdentifier'))
if url_request:
file_name = os.path.join(url_request.split('/')[-1])
with open(file_name, mode='wb') as file_pdf:
file_pdf.write(requests.get(url_request).content)
Это ошибка, как я могу это исправить? url_request=file(response['data'][file].get('fulltextIdentifier'))
TypeError: list indices must be integers or slices, not dict
Я новичок во всем этом, не могли бы вы мне помочь, пожалуйста?