我试图从一个航班搜索下载结果,但我一直得到一个不同的文件,我可以通过右键点击和存储网站手动获得。我已经尝试过urllib、urllib2和我在这里找到的所有命令都没有用。
这是一辆MWE:
import urllib2
import urllib
url = "https://ar.aeromexico.com/search/flight/RoundTrip/EZE/MEX/2014-12-10/2015-01-25/1/0/0?"
# Get data.
f = urllib2.urlopen(url)
# Write to file.
s = f.read()
f.close()
ff = open("temp.del", "w")
ff.write(s)
ff.close()其他尝试:
# 1
f = urllib.urlopen(url)
# 2
req = urllib2.Request(url)
f = urllib2.urlopen(req)
# 3
urllib.urlretrieve(url, "temp.del")如果我将所获得的文件与上述命令中的任何一个进行比较,它将不同于通过右键单击和“另存为”下载它的文件。
我做错了什么?
发布于 2014-09-19 22:28:43
这是因为在浏览器端加载和呈现页面的情况更多。可以使用异步请求来加载附加数据,执行的javascript代码等urllib/urllib2首先只获得浏览器接收的初始HTML页面。
此外,正如@tdelaney所指出的,服务器还可以进行额外的检查,比如检查您的User-Agent、一些自定义的标头或cookie等等。
在这种情况下,通常有两种一般的方法:
- [requests](http://docs.python-requests.org/en/latest/) (typically in conjunction with [`BeautifulSoup`](http://www.crummy.com/software/BeautifulSoup/bs4/doc/))
- [mechanize](http://wwwsearch.sourceforge.net/mechanize/)
- [mechanicalsoup](https://github.com/hickford/MechanicalSoup)
- [robobrowser](https://github.com/jmcarp/robobrowser)
selenium包会有所帮助的地方。例如,下面是如何使用selenium + Firefox web驱动程序获得每个结果的总价:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("https://ar.aeromexico.com/search/flight/RoundTrip/EZE/MEX/2014-12-10/2015-01-25/1/0/0?")
results = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, 'results')))
for price in results.find_elements_by_class_name('total-price'):
print price.text.strip()
driver.close()打印U$S 2.147。
https://stackoverflow.com/questions/25943216
复制相似问题