我一直在尝试从这个网站提取交易记录:https://www.house730.com/en-us/deal/?type=rent。
研究堆栈溢出,我偶然发现了一个解决方案,它使用
urllib.request
+ selenium.webdriver
下载并渲染网页。
类似这样的事情,在
load_data.py
:
from selenium import webdriver
from urllib.request import urlopen
import os
url = "https://www.house730.com/en-us/deal/?type=rent"
file_name = os.path.abspath(".") + "/tmp"
conn = urlopen(url)
data = conn.read()
conn.close()
file = open(file_name, "wb")
file.write(data)
file.close()
browser = webdriver.Firefox()
browser.get("file:///" + file_name)
html = browser.page_source
browser.quit()
print(html)
但是,当我跑步时
python load_data.py > tmp.html
并打开
tmp.html
。页面似乎崩溃了:
这也会发生在
wget
上。
wget "https://www.house730.com/en-us/deal/?type=rent" -O index.html
但是他们给出了不同的结果 html。为什么?
load_data.py 的结果:
https://gist.github.com/pond-nj/5fd51f81441463996ed20a8003981742#file-load_data_tmp-html
来自
wget
的结果:看起来
wget
已经比load_data.py
处理了更多的html。因为wget有一堆格式化的记录<div class="deal-data"
/>。这是为什么?
此外,这可能是一个很难问的问题。但是打开加载的 html 时页面崩溃的原因可能是什么?
使用
+urllib.request
下载并渲染 网页。selenium.webdriver
稍后意味着执行可能用于修改的 JavaScript 代码(如果存在)。 GNU
wget
不支持 JavaScript 执行,因此 JavaScript 代码的效果不会生效。您可以尝试在 Firefox 中禁用 JavaScript,如如何使用 selenium 在 Firefox 中禁用 javascript? 所示,然后检查结果。如果它们仍然不同,则可能是由于服务器根据User-Agent提供响应而导致的。