Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我会从网页抓取中得到返回的空列表?_Python_Xpath_Web Scraping_Lxml - Fatal编程技术网

Python 为什么我会从网页抓取中得到返回的空列表?

Python 为什么我会从网页抓取中得到返回的空列表?,python,xpath,web-scraping,lxml,Python,Xpath,Web Scraping,Lxml,我试图从一个网站上获取天气信息并收集这些数据。但有些请求返回空列表或与预期不同的信息。为什么会发生这种情况?从网站获取正确xpath和信息的正确格式和方法是什么 我曾尝试使用多个网站,但无法始终获得结果 import requests from lxml import html site1data = requests.get('http://m.bom.gov.au/vic/melbourne/', verify = False) tree = html.fromstring(site1d

我试图从一个网站上获取天气信息并收集这些数据。但有些请求返回空列表或与预期不同的信息。为什么会发生这种情况?从网站获取正确xpath和信息的正确格式和方法是什么

我曾尝试使用多个网站,但无法始终获得结果

import requests
from lxml import html

site1data = requests.get('http://m.bom.gov.au/vic/melbourne/', verify = 
False)
tree = html.fromstring(site1data.content)

humidity = tree.xpath('//div[@class="humidity"]/text()')

print(humidity)
预期结果如下: 67% 但我得到了:
['\n\t\t\t\t\t'、'\n\t\t\t\t\t'、'\n\t\t\t\t\t'、'\n\t\t\t']

因为您要查找的文本数据显示在
标记中,而不是
本身中:

<div class="humidity">
    <h3>Humidity</h3>
    <img class="humidity" src="/assets/images/ui/humidity.svg" />
    <p>65%</p>
</div>

因为您要查找的文本数据显示在
标记中,而不是
本身中:

<div class="humidity">
    <h3>Humidity</h3>
    <img class="humidity" src="/assets/images/ui/humidity.svg" />
    <p>65%</p>
</div>

如果您查看该站点,他们提供了一个测试站点,该站点由API提供,因此您可以通过json从该端点获取所有信息

import requests

r = requests.get('https://api.weather.bom.gov.au/v1/locations/r1r0fs/observations').json()
print(r)

如果您查看该站点,他们会提供一个测试版站点,该站点由API提供,因此您可以从该端点获取json格式的所有信息

import requests

r = requests.get('https://api.weather.bom.gov.au/v1/locations/r1r0fs/observations').json()
print(r)

其中有内部标记
//div[@class=“湿度”]/p/text()
。要获取所有文本节点,请使用:
//div[@class=“湿度”]/*/text()
其中有内部标记
//div[@class=“湿度”]/p/text()
。要获取所有文本节点,请使用:
//div[@class=“湿度”]/*/text()
,这是否意味着我必须在路径的末尾包含标记,才能到达网站中更具体的点?@BOBTHEBUILDER通常是这样。您可以使用XPath来导航文档的“骨骼”——DOM。这是一种允许精确刮削的工具。W3C对xpath有一个简单的定义。但也看看QHarr的答案。API现在非常常见,熟悉它们的使用非常有用。那么这是否意味着我必须在路径的末尾添加标记,才能将其带到网站中更具体的点?@BOBTHEBUILDER通常是这样。您可以使用XPath来导航文档的“骨骼”——DOM。这是一种允许精确刮削的工具。W3C对xpath有一个简单的定义。但也看看QHarr的答案。API现在很常见,熟悉它们的使用是很有用的。