Соскребая информацию с сайта несколько раз - PullRequest
0 голосов
/ 04 марта 2019

Программист-новичок, так что заранее, извините, если то, что я пишу, плохо сформулировано или просто глупо.

Я пытаюсь собрать информацию с веб-сайта и сохранить результаты в базе данных.Цель состоит в том, чтобы узнать все номера поездов, станций и посмотреть, опаздывает ли поезд или нет.Я начал делать это в цикле, я создавал этот URL, меняя $LETTER с каждой буквой алфавита, по одной: https://reservia.viarail.ca/GetStations.aspx?q=$LETTER

Затем я анализирую результатыи все правильно хранить в базе данных.Этот скрипт не займет много времени для запуска, так что это не проблема.Проблема возникает, когда я пытаюсь получить все поезда, которые проходят через каждую станцию.Для этого я просматриваю каждую ранее сохраненную станцию ​​(580 из них), а затем использую этот URL и изменяю $DATE на сегодня в YYY-MM-DD и $CODE с кодом станции:

reservia.viarail.ca/tsi/GetTrainList.aspx?OriginStationCode=$CODE&Date=$DATE

Так, например, у меня будет Эта ссылка для Монреаля

, и я пройду через каждый элемент таблицы и увижу номер поезда, чтобы затем вставить его в таблицу.До сих пор это был мой план, но запуск этого сценария занимал слишком много времени (более 7 минут), что имеет смысл, поскольку мы открываем 580 страниц.

Какой лучший способ сделать это?Я использую python, поскольку я пытаюсь изучить его, поэтому я импортировал библиотеку urllib и использовал ее для декодирования страницы, а затем я бы сортировал данные.Спасибо за любое предложение / помощь!

1 Ответ

0 голосов
/ 11 марта 2019

Мне нравятся такие вопросы!Хорошо, приведенный ниже код должен делать почти то, что вы хотите.

import json,urllib.request
import requests
import pandas as pd
from string import ascii_lowercase

alldata = []
for c in ascii_lowercase:
    response = requests.get('https://reservia.viarail.ca/GetStations.aspx?q=' + c)
    json_data = response.text.encode('utf-8', 'ignore') 
    df = pd.DataFrame(json.loads(json_data), columns=['sc', 'sn', 'pv'])  # etc., 
    alldata.append(df)

Теперь просто загрузите этот список в вашу базу данных.Готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...