xpath爬取新浪天气

时间:2022-01-15 00:09:45

参考资料:

http://cuiqingcai.com/1052.html

http://cuiqingcai.com/2621.html

http://www.cnblogs.com/jixin/p/5131040.html

完整代码:

 # -*- coding:utf-8 -*-
import urllib2
from lxml import etree
user_agent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"
headers = {'User-Agent':user_agent}
url = 'http://weather.sina.com.cn/'
user_input = raw_input("请输入你想查询天气的城市的拼音,如beijing\n")
# print user_input
url = url+user_input
# print url
req = urllib2.Request(url,headers=headers)
reponse = urllib2.urlopen(req)
text = reponse.read()
# print html
# print type(text)
html = etree.HTML(text)
# print html
# result = etree.tostring(html)
# print result
# 有时候当天天气信息的icons和times数据只有19条,分开处理
def change_list(lis):
new_lis = []
if len(lis) == 19:
if lis == icons:
new_lis.append(lis[0])
for i in range(1,19,2):
new_lis.append(lis[i]+u'转'+lis[i+1])
elif lis == times:
new_lis.append(lis[0].text)
for i in range(1, 19, 2):
new_lis.append(lis[i].text + u'到' + lis[i + 1].text)
elif len(lis) == 20:
if lis == icons:
for i in range(20,2):
new_lis.append(lis[i]+u'转'+lis[i+1])
elif lis == times:
for i in range(20,2):
new_lis.append(lis[i].text + u'到' + lis[i + 1].text)
return new_lis
note1 = html.xpath('//*[@class="wt_tt0_note"]')
note2 = html.xpath('//*[@class="wt_tt0_note"]/..')
# print note[0].text
dates = html.xpath('//*[@class="wt_fc_c0_i_date"]')
days = html.xpath('//*[@class="wt_fc_c0_i_date"]/following-sibling::*[1]')
icons = html.xpath('//*[@class="wt_fc_c0_i_icons clearfix"]/img/@alt')
# print len(icons)
icons = change_list(icons)
times = html.xpath('//*[@class="wt_fc_c0_i_times"]/span')
times = change_list(times)
temps = html.xpath('//*[@class="wt_fc_c0_i_temp"]')
tips = html.xpath('//*[@class="wt_fc_c0_i_tip"]')
ls = html.xpath('//*[@class="l"]')
rs = html.xpath('//*[@class="r"]')
print note1[0].text,note2[0].text
# print len(ls),len(rs)
# PM2.5和空气质量只有7条数据
for i in range(7):
print dates[i].text, days[i].text, times[i], icons[i], temps[i].text, tips[i].text, u'PM2.5:'+ls[i].text, u'空气质量:'+rs[i].text
for i in range(7,10):
print dates[i].text, days[i].text, times[i], icons[i], temps[i].text, tips[i].text