如何在页面加载完所有搜索结果后使用python urlopen刮取?

如何在页面加载完所有搜索结果后使用python urlopen刮取?,python,web-scraping,beautifulsoup,urlopen,Python,Web Scraping,Beautifulsoup,Urlopen,我试图从使用python3和BeautifulSoup中获取机票信息(包括飞机信息和价格信息等)。下面是我正在使用的python代码。在这段代码中,我试图从北京获取航班信息(北京) 去丽江(丽江) 2012年7月25日 import urllib.parse import urllib.request from bs4 import BeautifulSoup url = 'http://flight.qunar.com/site/oneway_list.htm' values = {'sear

我试图从使用python3和BeautifulSoup中获取机票信息(包括飞机信息和价格信息等)。下面是我正在使用的python代码。在这段代码中,我试图从北京获取航班信息(北京) 去丽江(丽江) 2012年7月25日

import urllib.parse
import urllib.request
from bs4 import BeautifulSoup
url = 'http://flight.qunar.com/site/oneway_list.htm'
values = {'searchDepartureAirport':'北京', 'searchArrivalAirport':'丽江', 'searchDepartureTime':'2012-07-25'}
encoded_param = urllib.parse.urlencode(values)
full_url = url + '?' + encoded_param
response = urllib.request.urlopen(full_url)
soup = BeautifulSoup(response)
print(soup.prettify())

我得到的是提交请求后的初始页面,页面仍在加载搜索结果。我想要的是加载完搜索结果后的最终页面。那么我如何使用python实现这一目标呢?

问题实际上相当棘手-该网站使用通过JavaScrip加载的动态生成内容t、 然而,
urllib
基本上只能获得禁用JavaScript后在浏览器中会得到的内容。那么,我们该怎么办呢

使用

完全呈现网页(它们基本上是无头的自动浏览器,用于测试和抓取)

或者,如果您想要(半)纯Python解决方案,请使用
PyQt4.QtWebKit
呈现页面。其工作原理大致如下:

import sys
import signal

from optparse import OptionParser
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import QWebPage

url = "http://www.stackoverflow.com"

def page_to_file(page):
    with open("output", 'w') as f:
        f.write(page.mainFrame().toHtml())
        f.close()

app = QApplication()
page = QWebPage()
signal.signal( signal.SIGINT, signal.SIG_DFL )
page.connect(page, SIGNAL( 'loadFinished(bool)' ), page_to_file)
page.mainFrame().load(QUrl(url))
sys.exit( app.exec_() )
编辑:这是一个很好的解释


Ps:你可能想研究而不是使用
urllib
:)

PyQt似乎是解决我问题的一个很好的选择。我会研究一下。谢谢,曼纽尔。还有一个问题:PyQt是免费的吗?是的,是!在linux上,只需执行
sudo apt获得安装python-qt4 libqt4 webkit
——在mac和windows上,你必须手动下载它们(我想你必须注册才能下载Qt)我试过PyQt,但我还是得到了与urlopen相同的结果,这不是我想要的。