爬天气数据,解析网页的时候有个元素不知道怎么取

2018-04-09 10:40:22 +08:00
 LeIYc
<div class="minMax">
<div id="maxTempDiv" style="float: left;"><img src="http://i.tq121.com.cn/i/weather2017/max.png"><span id="maxTemp">26℃</span></div>
<div id="minTempDiv" style="float: left;"><img src="http://i.tq121.com.cn/i/weather2017/min.png"><span id="minTemp">19℃</span></div>
</div>


怎么才能把温度信息 取出来。
temp_list = soup.find_all('span',id='maxTemp')
temp_list = soup.find_all('span',class_='minMax')
最后结果都是没有温度信息,打印出来这个:
[<div class="minMax">
<div id="maxTempDiv"><img src="http://i.tq121.com.cn/i/weather2017/max.png"/><span id="maxTemp"></span></div>
<div id="minTempDiv"><img src="http://i.tq121.com.cn/i/weather2017/min.png"/><span id="minTemp"></span></div>
</div>]
这种元素提取有没有什么好一点的教程啊?求助!!!!!
4368 次点击
所在节点    Python
28 条回复
windfarer
2018-04-09 10:45:14 +08:00
xpath 了解一下
0vels
2018-04-09 10:49:29 +08:00
soup.find('span',id='maxTemp').string 这样应该可以
F1024
2018-04-09 11:12:16 +08:00
xpath
zbl430
2018-04-09 11:43:12 +08:00
pyquery 也可以看下
imnpc
2018-04-09 11:44:04 +08:00
他这个元素大概是网页加载完成以后 js 操作 dom 写过去的...
LeIYc
2018-04-09 11:46:57 +08:00
@windfarer OK 上网搜到了。
LeIYc
2018-04-09 11:49:22 +08:00
@0vels 为什么。是说除了温度数据以外其他都是标签吗?这什么原理。不是直接写在网页上的吗?是从别的地方取到的?
LeIYc
2018-04-09 11:58:29 +08:00
@0vels 还是不对。打印出了 None。
shower
2018-04-09 12:04:04 +08:00
用 request-html,执行 JS 之后再取数据
LeIYc
2018-04-09 12:14:35 +08:00
@shower 额。。。具体怎么写?查下好像说数据是 js 生成的。直接取的话取不到?
johnj
2018-04-09 13:01:37 +08:00
看一下页面有没有发 ajax 请求,说不定有
Vhc001
2018-04-09 13:21:32 +08:00
@LeIYc 把页面 url 贴出来
LeIYc
2018-04-09 13:38:29 +08:00
mskip
2018-04-09 13:48:42 +08:00
@LeIYc
from requests_html import HTMLSession


session = HTMLSession()
response = session.get('http://www.weather.com.cn/weather1dn/101280601.shtml')
response.html.render()
print(response.html.find('#maxTemp')[0].text)
rabbbit
2018-04-09 13:48:44 +08:00
后加载的
alen
2018-04-09 13:57:59 +08:00
F12 看 Network
silencefent
2018-04-09 13:59:27 +08:00
//span[@id='maxtemp']
//span[@id='mintemp']
em70
2018-04-09 14:07:23 +08:00
准备两个函数
1. 提取两个字符串之间的内容
2. 提取一个文档内所有这两个字符串之间的内容

无论什么语言,有这两个函数,可以分析任意文本
imn1
2018-04-09 14:10:07 +08:00
特意加两个 id 标签,后加载可能性极高

而且天气数据基本按小时为单位更新,多数是 json 更新
LeIYc
2018-04-09 14:32:13 +08:00
谢谢 @rabbbit
找到了这样的信息:
var dataSK =
{"nameen":"shenzhen","cityname":"深圳","city":"101280601","temp":"26","tempf":"78","WD":"西南风","wde":"SW","WS":"2 级","wse":"&lt;12km/h","SD":"54%","time":"13:50","weather":"多云","weathere":"Cloudy","weathercode":"d01","qy":"1009","njd":"30.94km","sd":"54%","rain":"0.0","rain24h":"0","aqi":"71","limitnumber":"","aqi_pm25":"71","date":"04 月 09 日(星期一)"}
这个应该是正确的。但是怎么才能获取这个信息呢? 直接访问是不行的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/445285

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX