Как избавиться от ConnectionError во время Webscrapping для огромных данных? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь удалить данные из результатов поиска по этой ссылке . Есть около 2099 предметов, которые я хочу удалить. Но когда я запускаю свой скрипт, я получаю ConnectionError, но я могу получить только около 130 элементов. Я знаю, что некоторые веб-сайты разрешают только несколько запросов в определенное время c, но это может быть сделано с

try:
   code
except:
   time.sleep(60)
   continue

, но в моем случае это не работает.

Вот мой весь код, где я нахожусь используя технику JSON.

import pandas as pd
import requests
import time
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',}
url="https://www2.daad.de/deutschland/studienangebote/international-programmes/api/solr/en/search.json?cert=&admReq=&scholarshipLC=&scholarshipSC=&langDeAvailable=&langEnAvailable=&sort=4&q=&limit=1&offset={}&display=list&isSep="
listofanchor=[]
courses=[]
academy = []
city = []
languages = []
applicationDeadline = []
programmeDuration = []
beginning = []
subject = []
tuitionFees = []
image = []
dateString = []

pagenum=0
while pagenum<2100:

    finalUrl=url.format(pagenum)
    res=requests.get(finalUrl,headers=headers).json()
    for item in res['courses']:
        listofanchor.append(item['link'])
        courses.append(item['courseName'])
        print(courses)
        academy.append(item['academy'])
        city.append(item['city'])
        languages.append(item['languages'])
        applicationDeadline.append(item['applicationDeadline'])
        programmeDuration.append(item['programmeDuration'])
        beginning.append(item['beginning'])
        subject.append(item['subject'])
        tuitionFees.append(item['tuitionFees'])
        image.append(item['image'])
        dateString.append(item['dateString'])


    pagenum=pagenum+10

df = pd.DataFrame({"link":listofanchor,"courseName":courses, "academy":academy, "city":city, "languages":languages, "programmeDuration":programmeDuration,
                  "beginning":beginning, "subject":subject, "tuitionFees": tuitionFees,  'image': image, "dateString":dateString})

Или есть ли другой шанс получить данные из этого результата поиска?

1 Ответ

1 голос
/ 30 марта 2020
import requests
import pandas as pd

r = requests.get("https://www2.daad.de/deutschland/studienangebote/international-programmes/api/solr/en/search.json?cert=&admReq=&scholarshipLC=&scholarshipSC=&fos=&langDeAvailable=&langEnAvailable=&sort=4&q=&limit=2099&offset=&display=list&isSep=").json()

data = ["link", "courseName", "academy",
        "city", "languages", "programmeDuration", "beginning", "subject", "tuitionFees", "image", "dateString"]
d = []
for item in r["courses"]:
    d.append([item[x] for x in data])

df = pd.DataFrame(*[d], columns=data)

df.to_csv("data.csv", index=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...