jjxx2005 发表于 2020-7-20 21:44:03

循环问题请助!

本帖最后由 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 =
            temp = x1.xpath('//div[@class="weaul_z"]//text()')
            temp = + ',' + ''.join(temp) for i in range(0, len(temp), 5)]
          l1 = len(d1)
            # for i in l1:
            #   print(d1,temp)
            #   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('输入错误,请重新输入:')
状态了....

Twilight6 发表于 2020-7-20 21:56:11



改成这样试试看:

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('只能查询3天、7天、10天、15天、30天,请输入对应数字:')
            while n1 not in ['3','7','10','15','30']:
                ni = input('输入错误!只能查询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 =
            temp = x1.xpath('//div[@class="weaul_z"]//text()')
            temp = + ',' + ''.join(temp) for i in range(0, len(temp), 5)]
            l1 = len(d1)
            for i in range(l1):
                print(d1,temp)
                break
      except:
            print('输入错误,请重新输入:')

nahongyan1997 发表于 2020-7-20 22:02:05

本帖最后由 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 =
            temp = x1.xpath('//div[@class="weaul_z"]//text()')
            temp = + ',' + ''.join(temp) for i in range(0, len(temp), 5)]
            for i in range(len(d1)):
                print(d1,temp)
            break
      else:
            print('输入错误,请重新输入:')
            

jjxx2005 发表于 2020-7-20 22:03:10

Twilight6 发表于 2020-7-20 21:56
改成这样试试看:

他只显示一天的数据
07月20日今天 晴,21~34℃阴转多云
然后还是在不停的让我输入天数

nahongyan1997 发表于 2020-7-20 22:04:28

Twilight6 发表于 2020-7-20 21:56
改成这样试试看:

你是不是成天泡在论坛里

Twilight6 发表于 2020-7-20 22:11:45

本帖最后由 Twilight6 于 2020-7-20 22:15 编辑

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



看看这样呢:

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:
      n1 = input('只能查询3天、7天、10天、15天、30天,请输入对应数字:')
      while n1 not in ['3', '7', '10', '15', '30']:
            ni = input('输入错误!只能查询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 =
      temp = x1.xpath('//div[@class="weaul_z"]//text()')
      temp = + ',' + ''.join(temp) for i in range(0, len(temp), 5)]
      l1 = len(d1)
      for i in range(l1):
            print(d1, temp)
      # 如果只想循环一次,把这里的 break 注释去掉
      # break

nahongyan1997 发表于 2020-7-20 22:21:49

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

这个代码这回我试过了,完全没问题了。

nahongyan1997 发表于 2020-7-20 22:22:50

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

我的第一个最佳答案就交给你了

永恒的蓝色梦想 发表于 2020-7-20 23:01:39

nahongyan1997 发表于 2020-7-20 22:22
我的第一个最佳答案就交给你了

{:10_277:}最后,楼主白嫖了,谁也没选{:10_277:}
悲伤的故事{:10_243:}

nahongyan1997 发表于 2020-7-21 10:14:26

永恒的蓝色梦想 发表于 2020-7-20 23:01
最后,楼主白嫖了,谁也没选
悲伤的故事

No 白嫖!!

nahongyan1997 发表于 2020-7-21 10:16:41

永恒的蓝色梦想 发表于 2020-7-20 23:01
最后,楼主白嫖了,谁也没选
悲伤的故事

谢谢大佬的鱼币
页: [1]
查看完整版本: 循环问题请助!