我想刮MTA网站和需要一点帮助刮“火车线路行。” (供参考的网站:https://advisory.mtanyct.info/EEoutage/EEOutageReport.aspx?StationID=All
火车线路信息存储为图像文件(1线地铁,A线地铁等),描述了可通过特定车站访问的每条线路。我已经成功刮出,其中只有一列火车经过的行信息,但我有困难的,通过它具有多列列车通过它的列弄清楚如何遍历...使用条件语句来测试是否它有一行或多行。
eager
这就是我要遍历的表
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')
这成功地给了我一系列值,我可以成功地迭代以提取所需的值。
现在我尝试一起在一个for循环结合这些行的代码,以提取所有的信息,而不停止。
tableElements[8].find_elements_by_tag_name('td')[1].find_element_by_tag_name('h4').find_elements_by_tag_name('img')
我收到错误消息:“列表索引超出范围”。我不知道为什么,在独立完成每一次迭代似乎工作。我的直觉是我没有正确使用布尔操作正确这里。我的想法是,如果find_elements_by_tag_name的索引为[1],则意味着我要遍历多个图像文本。因此,为什么我要使用此布尔操作。
大家好,非常感谢您的帮助。我已经上传了我的全部代码Github上,并附链接,供您参考:https://github.com/tsp2123/MTA-Scraping/blob/master/MTA.ElevatorData.ipynb
最终目标将是使用的某种表示形式将此信息放入数据帧,并具有for循环,该循环将提取所需的图像信息。
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'))
答案 0 :(得分:0)
您的逻辑在这里不存在。
“我的直觉是我在这里没有正确地使用布尔运算。我的想法是,如果find_elements_by_tag_name的索引为[1],则意味着我要遍历多个图像文本。”
问题在于,如果索引位置[1]中没有任何内容,则无法检查该语句是否为True。因此,此时的错误。
if info.find_elements_by_tag_name('td')[1].find_element_by_tag_name('h4').find_elements_by_tag_name('img')[1] == True:
您要使用try:
,例如:
有关tableElements [1:]中的信息:
try:
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'))
except:
#do something else
print ('Nothing found in index position.')
是否还可以返回您的问题并提供完整的代码?当我尝试这种方法时,我得到11个表元素,因此想用您要抓取的特定表进行测试。