python - 多次从网站上抓取信息
问题描述
新手程序员请提前,如果我写的东西措辞不好或只是愚蠢的,对不起。
我正在尝试从网站上抓取信息并将结果存储在数据库中。目标是获取所有列车号、车站并查看列车是否晚点。我开始这样做的方式是在一个循环中,我一直在通过更改字母表中的每个字母来构建这个 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 库并使用它来解码页面,然后我会对数据进行排序。感谢您的任何建议/帮助!
解决方案
我喜欢这样的问题!好的,下面的代码应该几乎完全符合您的要求。
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)
现在,只需将该列表加载到您的数据库中。完毕。
推荐阅读
- udash - 动态加载输入时如何应用 jquery-ui 小部件
- python - 一般嵌套 for 循环的 Python 语法是什么?
- javascript - 为什么 this.props.map 不是函数?
- python - 如何从两个模型编辑 django rest 框架中的用户配置文件并保存更改
- python - 如何在 Odoo 中将值和翻译从一个字段复制到另一个字段?
- swift - Swift:如何为多个字符串过滤 UISearchBar?
- python - 如果页面在 selenium python 中加载时间过长,如何停止测试
- python - Python:如何获得与 Windows 文件名排序相同的排序顺序?
- string - java - 如何在Java的Netty中使用channelhandler处理String和HttpRequest?
- java - Apache Beam 使用多个表时的写入次数