抓取时如何使用条件语句?

时间:2019-02-03 01:54:25

标签: python-3.x selenium web-scraping

我想刮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'))

1 个答案:

答案 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个表元素,因此想用您要抓取的特定表进行测试。