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 LD衰减怎么根据纵坐标计算横坐标的值
  • ¥15 maya的mel里,怎样先选择模型A,然后利用mel脚本自动选择有相同名字的模型B呢。
  • ¥15 Python题,根本不会啊
  • ¥15 会会信号与系统和python的来
  • ¥15 关于#python#的问题
  • ¥20 oracle RAC 怎么配置啊,配置
  • ¥15 excel 日常使用中出现问题
  • ¥20 pdusession建立失败
  • ¥15 为什么mqtt接收不到数据?