【发布时间】:2015-12-09 19:42:28
【问题描述】:
要抓取的网址:http://aqicn.org/city/chennai//us-consulate/
这样做的原因是为了获取“pm2.5aqi”、“温度”、“湿度” , 来自网站的“压力”数据。
问题:从网站来源抓取的数据和查看的数据不相同。
我使用的代码来抓取和显示数据:
from bs4 import BeautifulSoup
import urllib2
import urllib
import cookielib
url="http://aqicn.org/city/chennai//us-consulate/"
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPRedirectHandler(),
urllib2.HTTPHandler(debuglevel=0),
urllib2.HTTPSHandler(debuglevel=0),
urllib2.HTTPCookieProcessor(cj))
page=opener.open(url)
page_soup=BeautifulSoup(page.read(),'html.parser')
print "curr, max, min pmi2.5 aqi : ",
print page_soup.find('td',id='cur_pm25').string," ",page_soup.find('td',id='max_pm25').string," ",page_soup.find('td',id='min_pm25').string
print "curr, max, min temp : ",
print page_soup.find('td',id='cur_t').span.string," ",page_soup.find('td',id='max_t').span.string," ",page_soup.find('td',id='min_t').span.string
print "curr, max, min pressure : ",
print page_soup.find('td',id='cur_p').string," ",page_soup.find('td',id='max_p').string," ",page_soup.find('td',id='min_p').string
print "curr, max, min humidity : ",
print page_soup.find('td',id='cur_h').string," ",page_soup.find('td',id='max_h').string," ",page_soup.find('td',id='min_h').string
我在做什么:我手动识别了页面源中包含值的标签,并从抓取的数据中打印了相同的标签值。
令人惊讶的是,显示的数据和页面源上的数据是不同的。
我抓取的数据:
curr, max, min pmi2.5 aqi : 143 157 109
curr, max, min temp : 24 30 24
curr, max, min pressure : 1012 1014 1010
curr, max, min humidity : 100 100 62
网站上的数据是:(可以通过链接验证数据,但数据可能会过时,因为它是实时数据)
curr, max, min pmi2.5 aqi : 108 166 94
curr, max, min temp : 27 30 24
curr, max, min pressure : 1013 1014 1010
curr, max, min humidity : 83 100 62
我在页面源代码中再次检查了相同的标签,并通过使用 python 显示汤来识别相同的区域:
print page_soup.prettify()
但数据不相同。
这怎么可能?有人可以解释为什么会发生这种奇怪的行为吗?并建议解决此问题的方法/解决方案?
【问题讨论】:
标签: python-2.7 web-scraping beautifulsoup