多次从网站上搜索信息

问题描述 投票:0回答:1

新手程序员如此提前,抱歉,如果我写的是措辞严厉或者只是简单的愚蠢。

我正在尝试从网站上抓取信息并将结果存储在数据库中。目标是获取所有列车编号,车站并查看列车是否迟到。我开始这样做的方式是循环,我一直在通过用字母表中的每个字母改变$LETTER来构建这个URL,一次一个:https://reservia.viarail.ca/GetStations.aspx?q=$LETTER

然后我解析结果并将所有内容正确存储在数据库中。此脚本运行不需要很长时间,因此没有问题。当我试图让所有列车通过每个车站时,问题出现了。为此,我浏览了之前存储的每个站点(其中580个),然后使用此URL并使用站点代码更改$DATEYYY-MM-DD中的$CODE

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

所以,例如,我会有This link for Montreal

我会浏览表中的每个元素并查看列车编号,然后将其插入表格中。到目前为止,这是我的计划,但运行这个脚本(超过7分钟)需要花费太多时间,这是有意义的,因为我们打开了580页。

有什么更好的方法呢?我正在使用python,因为我正在尝试学习它所以我一直在导入urllib库并使用它来解码页面,然后我会对数据进行排序。感谢您的任何建议/帮助!

python performance web-scraping
1个回答
0
投票

我喜欢这样的问题!好的,下面的代码应该几乎完全符合您的要求。

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)

现在,只需将该列表加载到您的数据库中。完成。

© www.soinside.com 2019 - 2024. All rights reserved.