Сохранить выбранную часть вывода формы веб-сайта в csv с python

Я хочу ввести мой источник и пункт назначения (O и D) в форму на этом веб-сайте ( http://fahrplan.sbb.ch/bin/query.exe/en ), затем запишите результат в csv-файл. Автоматизация этой задачи является единственным вариантом, который у меня есть, так как количество мест для ввода близко к 1000. Используя код, ниже которого я изменил здесь, я могу ввести места ввода в форме и распечатать результат на моем экранеbr.response().read(). Тем не менее, результат печатается в формате html, но я хочу, чтобы часть, выделенная синим цветом на изображении ниже, экспортировалась в файл csv. Как я могу это сделать?

Изображение:

см. изображение ниже

мой код:

from mechanize import Browser
br = Browser()

# Ignore robots.txt
br.set_handle_robots( False )
# Google demands a user-agent that isn't a robot
br.addheaders = [('User-agent', 'Chrome')]

# Retrieve the Google home page, saving the response
br.open('http://fahrplan.sbb.ch/bin/query.exe/en')

# # Show the available forms
# counter = 0
# for f in br.forms():
#     counter += 1
#     print f, counter
# print 'counter', counter

# Enter the text inpur
br.select_form(nr=6)
br.form[ "REQ0JourneyStopsS0G" ] = 'Leverkusen Mitte'
br.form[ "REQ0JourneyStopsZ0G" ] = 'Pescara Centrale'


# Get the search results
br.submit()
print br.response().read()


# How can I export the result to csv???

2 ответа

  1. Если вы посмотрите на источник результирующей HTML-страницы в консоли Google Chrome source, вы найдете четыре результата. Вот захват секции вылета первого результата:

    элемент результата

    Вы можете получить оставшиеся результаты, выполнив поиск в консоли с помощью текста, выделенного желтым цветом в my capture. Все , что вам нужно сейчас, это очистить и нарезать этот HTML-код с помощьюBeautiful Soup, а затем сохранить нарезанные разделы в CSVфайл.

  2. Как упоминалось в другом ответе , вы можете проанализировать ответ с помощью синтаксического анализатора HTML, напримерBeautifulSoup, выбрать каждое значение, которое вы хотите, поместить их в строку, разделенную запятыми, а затем записать его в файл.

    Вот пример кода, чтобы дать вам лучшую идею:

    from mechanize import Browser
    from bs4 import BeautifulSoup
    
    # get the response from mechanize Browser
    
    soup = BeautifulSoup(response, 'html.parser')
    trs = soup.select('table.hfs_overview tr')
    with open('out.csv', 'a+') as f:
        for tr in trs:
            locations = tr.select('td.location.departure a')
            if len(locations) > 0:
                location = locations[0].contents[0].strip()
                prefix = tr.select('td.prefix')[0].contents[0].strip()
                time = tr.select('td.time')[0].contents[0].strip()
                # parse more values here
                # write to file
                f.write("{},{},{}\n".format(location, prefix, time))