![]() | 1 windfarer 2018-04-09 10:45:14 +08:00 xpath 了解一下 |
![]() | 2 0vels 2018-04-09 10:49:29 +08:00 soup.find('span',id='maxTemp').string 这样应该可以 |
![]() | 3 F1024 2018-04-09 11:12:16 +08:00 xpath |
![]() | 4 zbl430 2018-04-09 11:43:12 +08:00 pyquery 也可以看下 |
![]() | 5 imnpc 2018-04-09 11:44:04 +08:00 ![]() 他这个元素大概是网页加载完成以后 js 操作 dom 写过去的... |
![]() | 9 shower 2018-04-09 12:04:04 +08:00 ![]() 用 request-html,执行 JS 之后再取数据 |
![]() | 11 johnj 2018-04-09 13:01:37 +08:00 看一下页面有没有发 ajax 请求,说不定有 |
13 LeIYc OP |
![]() | 14 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) |
![]() | 15 rabbbit 2018-04-09 13:48:44 +08:00 |
![]() | 16 alen 2018-04-09 13:57:59 +08:00 F12 看 Network |
17 silencefent 2018-04-09 13:59:27 +08:00 //span[@id='maxtemp'] //span[@id='mintemp'] |
18 em70 2018-04-09 14:07:23 +08:00 准备两个函数 1. 提取两个字符串之间的内容 2. 提取一个文档内所有这两个字符串之间的内容 无论什么语言,有这两个函数,可以分析任意文本 |
![]() | 19 imn1 2018-04-09 14:10:07 +08:00 特意加两个 id 标签,后加载可能性极高 而且天气数据基本按小时为单位更新,多数是 json 更新 |
20 LeIYc OP 谢谢 @rabbbit 找到了这样的信息: var dataSK = {"nameen":"shenzhen","cityname":"深圳","city":"101280601","temp":"26","tempf":"78","WD":"西南风","wde":"SW","WS":"2 级","wse":"<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 日(星期一)"} 这个应该是正确的。但是怎么才能获取这个信息呢? 直接访问是不行的 |
![]() | 23 woscaizi 2018-04-09 14:40:23 +08:00 直接带上 cookie 请求接口就 ok 了。 url: http://d1.weather.com.cn/sk_2d/101280601.html?_=1523255737236 cookie 类似这样:f_city=%E6%B3%B0%E5%AE%89%7C101120801%7C; Hm_lvt_080dabacb001ad3dc8b9b9049b36d43b=1523255730; Hm_lpvt_080dabacb001ad3dc8b9b9049b36d43b=1523255730; vjuids=2a011e2fb.162a91de08f.0.258106460fa03; vjlast=1523255730.1523255730.30; Wa_lvt_1=1523255731; Wa_lpvt_1=1523255731 还有就是一些基本的模仿浏览器的配置。 |
![]() | 24 yuanfnadi 2018-04-09 14:40:39 +08:00 如果只是为了天气数据。可以看一下彩云天气的 api。免费的。 |
25 LeIYc OP 非常感谢大家,发现还是得仔细看一遍书啊。 《 Python 网络数据采集》这本怎么样,刚下载下来。准备好好看看。 |
![]() | 26 seiuneko 2018-04-09 16:22:55 +08:00 |
27 jimmyczm 2018-04-10 10:14:14 +08:00 直接用 selenium 加载再查找好一点 from selenium import webdriver browser = webdriver.Chrome() browser.get('http://www.weather.com.cn/weather1dn/101280601.shtml') min = browser.find_element_by_id('maxTempDiv') max = browser.find_element_by_id('minTempDiv') print(min.text, max.text) |
28 baday 2018-04-12 09:55:17 +08:00 看对接口的请求记录,如果直接请求接口能够获取就不用模拟 js 了 |