|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 jjxx2005 于 2020-7-20 21:51 编辑
- import requests
- from lxml import etree
- UA = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'}
- a1 = input(f'是否想继续查询某城市近几日的天气预报? 是/否:')
- if a1 == '是' or a1 == 'Y' or a1 == 'y':
- while True:
- try:
- n1 = input(f'只能查询3天、7天、10天、15天、30天,请输入对应数字:')
- n1 in ['3','7','10','15','30']
- url = f'https://www.tianqi.com/beijing/{n1}/'
- r1 = requests.get(url=url, headers=UA).text
- x1 = etree.HTML(r1)
- d1 = x1.xpath('//div[@class="weaul_q weaul_qblue"]/text()')
- d1 = [d1.strip() for d1 in d1]
- temp = x1.xpath('//div[@class="weaul_z"]//text()')
- temp = [temp[i] + ',' + ''.join(temp[i + 1:i + 6]) for i in range(0, len(temp), 5)]
- l1 = len(d1)
- # for i in l1:
- # print(d1[i],temp[i])
- # break
- except:
- print('输入错误,请重新输入:')
复制代码
我的目的是
(1)当a1接收到是或Y或y时继续,否则退出
(2)如果继续时,再让输入天数,如果输入不是3,7,10,15,30,那就重新输入,直到输入的数字符合3,7,10,15,30为止
(3)当输入的数字符合 3,7,10,15,30时,解析网页,拿到d1和temp两个列表,现在想将列表对应的元素显示出来,然后退出循环
比如
d1 = ['a','b','c']
temp = ['1','2','3']
想打印出来的结果是:
a,1
b,2
c,3
但是try里面写for循环就会进入
except:
print('输入错误,请重新输入:')
状态了....
本帖最后由 nahongyan1997 于 2020-7-20 22:21 编辑
我修改并优化了你的代码,使它更迎合你要表达的意思,但你的xpath表达式本身存在问题导致根本无法爬取到数据。
满意请设置最佳答案
- import requests
- from lxml import etree
- UA = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'}
- a1 = input(f'是否想继续查询某城市近几日的天气预报? 是/否:')
- if a1 == '是' or a1.casefold() == 'y':
- while True:
- n1 = input(f'只能查询3天、7天、10天、15天、30天,请输入对应数字:')
- if n1 in ['3','7','10','15','30']:
- url = f'https://www.tianqi.com/beijing/{n1}/'
- r1 = requests.get(url=url,headers = UA).text
- x1 = etree.HTML(r1)
- d1 = x1.xpath('//div[@class="weaul_q weaul_qblue"]/text()')
- d1 = [d2.strip() for d2 in d1]
- temp = x1.xpath('//div[@class="weaul_z"]//text()')
- temp = [temp[i] + ',' + ''.join(temp[i + 1:i + 6]) for i in range(0, len(temp), 5)]
- for i in range(len(d1)):
- print(d1[i],temp[i])
- break
- else:
- print('输入错误,请重新输入:')
-
复制代码
|
|