如何在页面加载完所有搜索结果后使用python urlopen刮取?
我试图从使用python3和BeautifulSoup中获取机票信息(包括飞机信息和价格信息等)。下面是我正在使用的python代码。在这段代码中,我试图从北京获取航班信息(北京) 去丽江(丽江) 2012年7月25日如何在页面加载完所有搜索结果后使用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
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后在浏览器中会得到的内容。那么,我们该怎么办呢
使用
- 或
- 或
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相同的结果,这不是我想要的。