Обойти "существующее соединение было принудительно закрыто удаленным хостом" - PullRequest
0 голосов
/ 09 июля 2019

Я собираю метаданные из статей о 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")

1 Ответ

0 голосов
/ 09 июля 2019

Просто нужен заголовок User-Agent

import requests
from bs4 import BeautifulSoup as bs

headers = {'User-Agent': 'Mozilla/5.0'}
r = requests.get('https://jamanetwork.com/journals/jama/issue/319/1', headers=headers)
soup = bs(r.content, 'lxml')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...