为什么我从网络抓取中得到空列表?
why do i get empty lists returned from web scraping?
我正在尝试从网站获取天气信息并收集这些数据。但有些请求 return 空列表或与预期不同的信息。为什么会发生这种情况,从网站获取正确的 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\t']
因为您要查找的文本数据显示在 <p>
标签内,而不是 <div>
本身内:
<div class="humidity">
<h3>Humidity</h3>
<img class="humidity" src="/assets/images/ui/humidity.svg" />
<p>65%</p>
</div>
这个 xpath 应该可以解决您眼前的问题:
humidity = tree.xpath('//div[@class="humidity"]/p/text()')
如果您查看该站点,他们会提供一个测试站点,该站点已 API 提供,因此您可以从该端点获取所有信息,如 json
import requests
r = requests.get('https://api.weather.bom.gov.au/v1/locations/r1r0fs/observations').json()
print(r)
我正在尝试从网站获取天气信息并收集这些数据。但有些请求 return 空列表或与预期不同的信息。为什么会发生这种情况,从网站获取正确的 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\t']
因为您要查找的文本数据显示在 <p>
标签内,而不是 <div>
本身内:
<div class="humidity">
<h3>Humidity</h3>
<img class="humidity" src="/assets/images/ui/humidity.svg" />
<p>65%</p>
</div>
这个 xpath 应该可以解决您眼前的问题:
humidity = tree.xpath('//div[@class="humidity"]/p/text()')
如果您查看该站点,他们会提供一个测试站点,该站点已 API 提供,因此您可以从该端点获取所有信息,如 json
import requests
r = requests.get('https://api.weather.bom.gov.au/v1/locations/r1r0fs/observations').json()
print(r)