【发布时间】:2019-02-03 01:54:25
【问题描述】:
我正在尝试抓取 MTA 网站,需要一些帮助来抓取“Train Lines Row”。 (参考网址:https://advisory.mtanyct.info/EEoutage/EEOutageReport.aspx?StationID=All
火车线路信息存储为图像文件(1 线地铁、A 线地铁等),描述可通过特定车站访问的每条线路。我已经成功地从只有一列火车通过的行中刮取信息,但是我很难弄清楚如何遍历有多列火车通过的列...使用条件语句来测试是否它有一行或多行。
tableElements = table.find_elements_by_tag_name('tr')
这是我正在迭代的表
tableElements[2].find_elements_by_tag_name('td')[1].find_element_by_tag_name('h4').find_element_by_tag_name('img').get_attribute('alt')
如果特定列中仅存在一个值,这将成功地为我提供值
tableElements[8].find_elements_by_tag_name('td')[1].find_element_by_tag_name('h4').find_elements_by_tag_name('img')
这成功地为我提供了一个值列表,我可以成功地迭代以提取我需要的值。
现在我尝试将这些代码行组合在一个 forloop 中,以不间断地提取所有信息。
for info in tableElements[1:]:
if info.find_elements_by_tag_name('td')[1].find_element_by_tag_name('h4').find_elements_by_tag_name('img')[1] == True:
for images in info.find_elements_by_tag_name('td')[1].find_element_by_tag_name('h4').find_elements_by_tag_name('img'):
print(images.get_attribute('alt'))
else:
print(info.find_elements_by_tag_name('td')[1].find_element_by_tag_name('h4').find_element_by_tag_name('img').get_attribute('alt'))
我收到错误消息:“列表索引超出范围。”我不知道为什么,因为孤立地完成的每一次迭代似乎都有效。我的预感是我在这里没有正确使用布尔运算。我的想法是,如果 find_elements_by_tag_name 的索引为 [1],这意味着我需要遍历多个图像文本。因此,我为什么要使用这个布尔运算。
大家好,非常感谢您的帮助。我已将我的完整代码上传到 Github 并附上一个链接供您参考:https://github.com/tsp2123/MTA-Scraping/blob/master/MTA.ElevatorData.ipynb
最终目标是使用某种公式将这些信息放入数据框中,并使用 for 循环提取我想要的图像信息。
dataframe = []
for elements in tableElements:
row = {}
columnName1 = find_element_by_class_name('td')
..
【问题讨论】:
-
你能提供你正在使用的完整代码吗?
标签: python-3.x selenium web-scraping