Как собрать информацию с сайтов с подрамниками - PullRequest
1 голос
/ 30 июня 2019

Я пытаюсь создать простой веб-скребок для извлечения информации о полете из студенческой вселенной.

Я использовал селен для навигации по веб-страницам, чтобы получить информацию о полете для желаемого местоположения и даты.Для меня нет проблем, чтобы попасть на нужную страницу со всей информацией.Однако у меня возникают трудности при извлечении информации с веб-страницы.Я использовал xpath, чтобы найти те элементы, которые содержат требуемую информацию, но извлечение информации будет неудачным, если я не прокручиваю вручную вверх и вниз веб-страницу.Похоже, это как-то связано с подкадрами, встроенными в сайт.Я попытался перебрать весь iframe, чтобы увидеть, получаю ли я информацию с помощью команды driver.switch_to.frame (), но проблема остается.

Было бы замечательно, если бы кто-нибудь мог предложить некоторую помощь относительно того, как собирать информацию с таких веб-сайтов.Проблема не может быть вызвана наличием подрамника.Любой вклад приветствуется.Код, который я использовал для извлечения информации о рейсах, показан ниже, тег статьи содержит всю информацию (имя перевозчика, время отправления, время прибытия и т. Д.).Что я сделал в первую очередь, чтобы найти этот элемент.

    def parseprice(driver):
        driver.maximize_window()
        parser = lxml.html.fromstring(driver.page_source,driver.current_url)
        flights=parser.xpath('//article[@class="itin activeCheck"]') 
        driver.quit()
        carriername=flights[0].xpath('//p[@id="airlineName0"]/text()')
        duration=flights[0].xpath('//strong[@id="duration0"]/text()')
        depttime=flights[0].xpath('//span[@id="departureTime0"]/text()')
        arrtime=flights[0].xpath('//span[@id="arrivalTime0"]/text()')
        price=flights[0].xpath('//p[@ng-click="pricePoint()"]//text()')
        stops=flights[0].xpath('//p[@id="stops0"]//text()')
        stoplis=list()
        for st in stops:
            res1=re.search('^(\d)+\D*',st)
            if res1 is not None:
                stoplis.append(int(res1.group(1)))
        now=datetime.datetime.now()
        now=now.timetuple()
        for i in range(20):
        yield{'current time':str(now[1])+'/'+str(now[2])+'/'+str(now[0]),'carrier':carriername[i],'duration':duration[i],'price':price[i],'numstops':stoplis[i],'departure_time':depttime[i],'arrival_time':arrtime[i]}
...