sinat_38839485 2022-06-12 02:11 采纳率: 100%
浏览 53
已结题

python:for循环内嵌套for不执行迭代器

新手写了一个抓取网址的爬虫,但是发现 for url, favorites in zip(child_url_result, child_url_favorites_result):这个循环没有进入或者进入之后什么都没做就出去了,是迭代器在嵌套for循环内有什么规则吗?我试了上面的[a,b,c]循环可以进入并打印,请问是什么问题

class Crawler(object):
    def __init__(self):  # __init__,构造,初始化,实例化。
        self.child_url_no = 1
        self.top_videos_home = 'http://#####/v.php?category=rf&viewtype=basic&page='
        self.headers = {'Cookie': 'Cookie',
                   'User-Agent': 'User-Agent',
                   'Refer': 'Refer'
                   }
        self.child_url_list = []
        self.child_url_favorites_list = []

    def get_child_url_list(self, page_num):
        for x in range(page_num):  # 用page_num循环页数
            # 获取网页源码,用str(self.child_url_no)改变网址页码并遍历
            child_url_resp = requests.get(self.top_videos_home + str(self.child_url_no), verify=False, headers=self.headers)   
            #  获取两个迭代器用于筛选
            child_url_favorites_resp = child_url_resp
            child_url_resp.encoding = 'utf-8'
            child_url_favorites_resp.encoding = 'utf-8'
            time.sleep(2)
            #  建立正则表达规则
            child_url_object = re.compile(r'well-sm videos-text-align">\
        \
              <a href="(?P<child_url>.*?)">', re.S)
            child_url_result = child_url_object.finditer(child_url_resp.text)

            child_url_favorites_object = re.compile('Favorites:</span> (?P<child_url_favorites>.*?)      <br>', re.S)
            child_url_favorites_result = child_url_favorites_object.finditer(child_url_favorites_resp.text)
            for i in ['a', 'b', 'c']:  #  测试用
                print(i)  #正常打印
            for url, favorites in zip(child_url_result, child_url_favorites_result): #  该循环没有进入或者进入无动作
                self.child_url_list.append(url.group('child_url')) #  列表为空
                self.child_url_favorites_list.append(favorites.group('child_url_favorites')) #  列表为空
            self.child_url_no += 1 #  正常递增
  

if __name__ == '__main__':
    C9PV = Crawler()
    C9PV.get_child_url_list(3)


  • 写回答

3条回答 默认 最新

  • 天际的海浪 2022-06-12 03:35
    关注

    for url, favorites in zip(child_url_result, child_url_favorites_result):
    该循环没有进入是因为child_url_result 或 child_url_favorites_result 两个列表有一个是空列表
    你输出下child_url_result, child_url_favorites_result看看

    zip()迭代的元素长度是由其中参数列表中长度最小的列表而定, 当其中列表有一个是空列表,zip()也就返回空的迭代

    a = [1,2,3,4,5,6]
    b = [7,8,9]
    for v1, v2 in zip(a,b):
        print(v1,v2)
    
    输出
    1 7
    2 8
    3 9
    
    循环3次, a中的4,5,6不会遍历
    
    如果b是[]空列表
    
    a = [1,2,3,4,5,6]
    b = []
    for v1, v2 in zip(a,b):
        print(v1,v2)
    
    也就循环0次, 什么都不输出
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月26日
  • 已采纳回答 6月18日
  • 赞助了问题酬金10元 6月12日
  • 修改了问题 6月12日
  • 展开全部

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同