如何从带有子框架的网站上抓取信息

时间:2019-06-30 14:28:55

标签: python screen-scraping

我正在尝试构建一个简单的网络抓取工具,以从学生宇宙中提取航班信息。

我用硒导航网页,以获取所需位置和日期的航班信息。对于我来说,使用所有信息进入正确的页面没有问题。 但是,我很难从网页中提取信息。我使用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]}

0 个答案:

没有答案