鱼C论坛

 找回密码
 立即注册
查看: 1682|回复: 12

[已解决]循环问题请助!

[复制链接]
发表于 2020-7-20 21:44:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 jjxx2005 于 2020-7-20 21:51 编辑
  1. import requests
  2. from lxml import etree
  3. 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'}
  4. a1 = input(f'是否想继续查询某城市近几日的天气预报? 是/否:')
  5. if a1 == '是' or a1 == 'Y' or a1 == 'y':
  6.     while True:
  7.         try:
  8.             n1 = input(f'只能查询3天、7天、10天、15天、30天,请输入对应数字:')
  9.             n1 in ['3','7','10','15','30']
  10.             url = f'https://www.tianqi.com/beijing/{n1}/'
  11.             r1 = requests.get(url=url, headers=UA).text
  12.             x1 = etree.HTML(r1)
  13.             d1 = x1.xpath('//div[@class="weaul_q weaul_qblue"]/text()')
  14.             d1 = [d1.strip() for d1 in d1]
  15.             temp = x1.xpath('//div[@class="weaul_z"]//text()')
  16.             temp = [temp[i] + ',' + ''.join(temp[i + 1:i + 6]) for i in range(0, len(temp), 5)]
  17.             l1 = len(d1)
  18.             # for i in l1:
  19.             #     print(d1[i],temp[i])
  20.             #     break
  21.         except:
  22.             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('输入错误,请重新输入:')
状态了....
最佳答案
2020-7-20 22:02:05
本帖最后由 nahongyan1997 于 2020-7-20 22:21 编辑

我修改并优化了你的代码,使它更迎合你要表达的意思,但你的xpath表达式本身存在问题导致根本无法爬取到数据。
满意请设置最佳答案
  1. import requests
  2. from lxml import etree
  3. 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'}
  4. a1 = input(f'是否想继续查询某城市近几日的天气预报? 是/否:')

  5. if a1 == '是' or a1.casefold() == 'y':
  6.     while True:
  7.         n1 = input(f'只能查询3天、7天、10天、15天、30天,请输入对应数字:')
  8.         if n1 in ['3','7','10','15','30']:
  9.             url = f'https://www.tianqi.com/beijing/{n1}/'
  10.             r1 = requests.get(url=url,headers = UA).text
  11.             x1 = etree.HTML(r1)
  12.             d1 = x1.xpath('//div[@class="weaul_q weaul_qblue"]/text()')
  13.             d1 = [d2.strip() for d2 in d1]
  14.             temp = x1.xpath('//div[@class="weaul_z"]//text()')
  15.             temp = [temp[i] + ',' + ''.join(temp[i + 1:i + 6]) for i in range(0, len(temp), 5)]
  16.             for i in range(len(d1)):
  17.                 print(d1[i],temp[i])
  18.             break
  19.         else:
  20.             print('输入错误,请重新输入:')
  21.             
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-20 21:56:11 | 显示全部楼层


改成这样试试看:

  1. import requests
  2. from lxml import etree
  3. 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'}
  4. a1 = input(f'是否想继续查询某城市近几日的天气预报? 是/否:')
  5. if a1 == '是' or a1 == 'Y' or a1 == 'y':
  6.     while True:
  7.         try:
  8.             n1 = input('只能查询3天、7天、10天、15天、30天,请输入对应数字:')
  9.             while n1 not in ['3','7','10','15','30']:
  10.                 ni = input('输入错误!只能查询3天、7天、10天、15天、30天,请输入对应数字:')
  11.             url = f'https://www.tianqi.com/beijing/{n1}/'
  12.             r1 = requests.get(url=url, headers=UA).text
  13.             x1 = etree.HTML(r1)
  14.             d1 = x1.xpath('//div[@class="weaul_q weaul_qblue"]/text()')
  15.             d1 = [d1.strip() for d1 in d1]
  16.             temp = x1.xpath('//div[@class="weaul_z"]//text()')
  17.             temp = [temp[i] + ',' + ''.join(temp[i + 1:i + 6]) for i in range(0, len(temp), 5)]
  18.             l1 = len(d1)
  19.             for i in range(l1):
  20.                 print(d1[i],temp[i])
  21.                 break
  22.         except:
  23.             print('输入错误,请重新输入:')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-20 22:02:05 | 显示全部楼层    本楼为最佳答案   
本帖最后由 nahongyan1997 于 2020-7-20 22:21 编辑

我修改并优化了你的代码,使它更迎合你要表达的意思,但你的xpath表达式本身存在问题导致根本无法爬取到数据。
满意请设置最佳答案
  1. import requests
  2. from lxml import etree
  3. 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'}
  4. a1 = input(f'是否想继续查询某城市近几日的天气预报? 是/否:')

  5. if a1 == '是' or a1.casefold() == 'y':
  6.     while True:
  7.         n1 = input(f'只能查询3天、7天、10天、15天、30天,请输入对应数字:')
  8.         if n1 in ['3','7','10','15','30']:
  9.             url = f'https://www.tianqi.com/beijing/{n1}/'
  10.             r1 = requests.get(url=url,headers = UA).text
  11.             x1 = etree.HTML(r1)
  12.             d1 = x1.xpath('//div[@class="weaul_q weaul_qblue"]/text()')
  13.             d1 = [d2.strip() for d2 in d1]
  14.             temp = x1.xpath('//div[@class="weaul_z"]//text()')
  15.             temp = [temp[i] + ',' + ''.join(temp[i + 1:i + 6]) for i in range(0, len(temp), 5)]
  16.             for i in range(len(d1)):
  17.                 print(d1[i],temp[i])
  18.             break
  19.         else:
  20.             print('输入错误,请重新输入:')
  21.             
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +5 收起 理由
永恒的蓝色梦想 + 5 + 5 + 5 摸摸

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-20 22:03:10 | 显示全部楼层
Twilight6 发表于 2020-7-20 21:56
改成这样试试看:

他只显示一天的数据
07月20日今天 晴,21~34℃阴转多云
然后还是在不停的让我输入天数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-20 22:04:28 | 显示全部楼层
Twilight6 发表于 2020-7-20 21:56
改成这样试试看:

你是不是成天泡在论坛里

点评

我很赞同!: 5.0
我很赞同!: 5
  发表于 2020-7-20 22:59
哈~  发表于 2020-7-20 22:11
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-20 22:11:45 | 显示全部楼层
本帖最后由 Twilight6 于 2020-7-20 22:15 编辑
jjxx2005 发表于 2020-7-20 22:03
他只显示一天的数据
07月20日今天 晴,21~34℃阴转多云
然后还是在不停的让我输入天数




看看这样呢:

  1. import requests
  2. from lxml import etree

  3. UA = {
  4.     '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'}
  5. a1 = input(f'是否想继续查询某城市近几日的天气预报? 是/否:')
  6. if a1 == '是' or a1 == 'Y' or a1 == 'y':
  7.     while True:
  8.         n1 = input('只能查询3天、7天、10天、15天、30天,请输入对应数字:')
  9.         while n1 not in ['3', '7', '10', '15', '30']:
  10.             ni = input('输入错误!只能查询3天、7天、10天、15天、30天,请输入对应数字:')
  11.         url = f'https://www.tianqi.com/beijing/{n1}/'
  12.         r1 = requests.get(url=url, headers=UA).text
  13.         x1 = etree.HTML(r1)
  14.         d1 = x1.xpath('//div[@class="weaul_q weaul_qblue"]/text()')
  15.         d1 = [i.strip() for i in d1]
  16.         temp = x1.xpath('//div[@class="weaul_z"]//text()')
  17.         temp = [temp[i] + ',' + ''.join(temp[i + 1:i + 6]) for i in range(0, len(temp), 5)]
  18.         l1 = len(d1)
  19.         for i in range(l1):
  20.             print(d1[i], temp[i])
  21.         # 如果只想循环一次,把这里的 break 注释去掉  
  22.         # break
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
jjxx2005 + 5 + 5 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-20 22:21:49 | 显示全部楼层
nahongyan1997 发表于 2020-7-20 22:02
我修改并优化了你的代码,使它更迎合你要表达的意思,但你的xpath表达式本身存在问题导致根本无法爬取到数 ...

这个代码这回我试过了,完全没问题了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-20 22:22:50 | 显示全部楼层
jjxx2005 发表于 2020-7-20 22:03
他只显示一天的数据
07月20日今天 晴,21~34℃阴转多云
然后还是在不停的让我输入天数

我的第一个最佳答案就交给你了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-20 23:01:39 | 显示全部楼层
nahongyan1997 发表于 2020-7-20 22:22
我的第一个最佳答案就交给你了

最后,楼主白嫖了,谁也没选

悲伤的故事
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-21 10:14:26 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-7-20 23:01
最后,楼主白嫖了,谁也没选

悲伤的故事

No 白嫖!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-21 10:16:41 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-7-20 23:01
最后,楼主白嫖了,谁也没选

悲伤的故事

谢谢大佬的鱼币
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-24 01:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表