通过此请求,我返回页面源,但IP地址/主机名/位置字段为空。为什么,我怎么能得到这些?
import urllib.request
s = urllib.request.urlopen("http://www.whatsmyipaddress.net").read()
txt = str(s)
fs = open('myip-net.htm', 'w')
fs.write(txt)
fs.close()
答案 0 :(得分:0)
whatsmyipaddress.net 使用JavaScript检索IP地址/主机名/位置字段。 JavaScript仅在您通过Web浏览器导航到页面时执行。您正在抓取HTML文件本身并将其内容写入另一个不执行JS的文件。此外,如果没有HTML链接到的CSS和JS文件的副本,该HTML文件将无法在本地计算机上正确加载。
如果您只关心获取IP和位置数据,我建议您从公共API请求数据。
答案 1 :(得分:0)
也许尝试选择selenium:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.whatsmyipaddress.net")
ip = driver.find_element_by_css_selector('p').text
返回:
'12.23.34.45' # the ip
首次尝试使用BeautifulSoup并提取内容时,我总是遇到此问题。我认为@Daniel Wasilewski是对的。他的回答很好。
注意:你还需要chromedriver.exe来做这样的工作。你不必使用Chrome; Firefox也可以运行。
<强>更新强>:
我意识到这不是一个理想的答案,但除非你知道另一种处理javascript的方法,否则这只是&#34;单向&#34;可能是其他人。
Selenium有一个无头的&#34;选项,但它仍然打开看起来像命令窗口(在Windows上)。它被称为 phantomjs 。我不会详细描述有关它的所有内容; SO上有很多信息。
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get("http://www.whatsmyipaddress.net")
ip = driver.find_element_by_css_selector('p').text
print(ip)