Я собираю метаданные из статей о JAMA.Я использовал небольшие вариации одного и того же кода для выполнения той же задачи с несколькими другими медицинскими / медицинскими журналами и смог получить необходимые мне данные.Однако в JAMA вместо этого я получаю следующее сообщение об ошибке: «ConnectionResetError: [WinError 10054] Существующее соединение было принудительно закрыто удаленным хостом».
Из сообщения Google об ошибках я подозреваю, что это может быть попытка JAMA предотвратить атаку типа «отказ в обслуживании».Я не думаю, что это ограничение скорости, потому что я даже не смог получить данные из JAMA для начала.
Для справки, я вставил свой код ниже.
import requests
import urllib
from bs4 import BeautifulSoup
import pandas as pd
import re
import numpy as np
import csv
json_data = []
jama2018 = requests.get('https://jamanetwork.com/journals/jama/issue/319/1')
soup1=BeautifulSoup(jama2018.text, 'lxml')
#Get each issue
for i in soup1:
issue = [a.get('href') for a in soup1.find_all('a', {'class':re.compile('^issue-entry')})]
readuissue = requests.get(issue)
soup2=BeautifulSoup(readissue.text, 'lxml')
#Get each article
articlelinks = [a.get('href') for a in soup2.find_all('a', {'class':'article--full-text'})]
for a in articlelinks:
jamadict={"articletype":"NaN", "title":"NaN", "volume":"NaN", "issue":"NaN", "authors":"NaN", "url":"NaN"}
openarticle= requests.get(a)
soup3 = BeautifulSoup(openarticle.text, 'lxml')
#Metadata for each article
articletype = soup3.find("div", {"class":"meta-article-type thm-col"})
title = soup3.find("meta", {"name":"citation_title"})
volume = soup3.find("meta", {"name":"citation_volume"})
issue = soup3.find("meta", {"name":"citation_issue"})
authors=soup3.find("div", {"class":"meta-authors"})
url = a
if articletype is not None:
jamadict['articletype']=articletype.text.strip()
if title is not None:
jamadict['title']=title['content'].strip()
if volume is not None:
jamadict['volume'] = volume['content'].strip()
if issue is not None:
jamadict['issue'] = issue['content'].strip()
if authors is not None:
jamadict['authors'] = authors.text.strip()
if url is not None:
jamadict['url'] = url
df=pd.DataFrame(json_data)
df.to_csv('jama_2018.csv')
print("Saved")