gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:57:05 24 4
gpt4 key购买 nike

我正在尝试从http://flight.qunar.com/ 中抓取机票信息(包括飞机信息和价格信息等)使用 python3 和 BeautifulSoup。下面是我正在使用的 python 代码。在这段代码中,我试图在 2012-07-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 实现这个目标呢?

最佳答案

这个问题实际上非常困难 - 该站点使用通过 JavaScript 加载的动态生成的内容,但是 urllib 基本上只获取您在禁用 JavaScript 时在浏览器中获取的内容。那么,我们能做什么呢?

使用

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

或者,如果您想要一个(半)纯 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_() )

编辑:有一个很好的解释这是如何工作的here .

Ps: 你可能想看看requests而不是使用 urllib :)

关于python - 页面加载完所有搜索结果后如何使用python urlopen抓取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11645786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com