关于#python#的问题,如何解决?

#不知道为啥只保存了最后一页的内容,我成功获取了10页的内容
#麻烦大佬们看看,帮助我一下,谢谢

import requests
import re
import csv
for a in range(10):
    url = 'https://movie.douban.com/top250?start={}&filter='.format(a*25)
    headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.1.5162 SLBChan/30'
    }
    resp = requests.get(url,headers=headers)
    page_content = resp.text
    #页面源代码
    #解析数据
    obj = re.compile(r'<li>.*?<div class="item">.*? <span class="title">(?P<name>.*?)</span>'
                 r'.*? <p class="">.*?<br>(?P<time>.*?)&nbsp.*?<span class="rating_num"'
                 r' property="v:average">'
                 r'(?P<score>.*?)</span>.*? <span>(?P<num>.*?)</span>',re.S)
    #开始匹配
    result = obj.finditer(page_content)
    with open('date.csv',mode='w',encoding='utf-8') as f:
        csv_write=csv.writer(f)
        for it in result:
            dic = it.groupdict()
            dic['time'] = dic['time'].strip()
            dic['score'] = dic['score'].strip()
            dic['num'] = dic['num'].strip()
            csv_write.writerow(dic.values())
        f.close()
        print('结束!')


import requests
import re
import csv

with open('douban_top250.csv', mode='w', encoding='utf-8', newline='') as f:
    csv_write = csv.writer(f)

    for a in range(10):
        url = 'https://movie.douban.com/top250?start={}&filter='.format(a * 25)
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.1.5162 SLBChan/30'
        }
        resp = requests.get(url, headers=headers)
        page_content = resp.text

        obj = re.compile(r'<li>.*?<div class="item">.*? <span class="title">(?P<name>.*?)</span>'
                         r'.*? <p class="">.*?<br>(?P<time>.*?)&nbsp.*?<span class="rating_num"'
                         r' property="v:average">'
                         r'(?P<score>.*?)</span>.*? <span>(?P<num>.*?)</span>', re.S)

        result = obj.finditer(page_content)

        for it in result:
            dic = it.groupdict()
            dic['time'] = dic['time'].strip()
            dic['score'] = dic['score'].strip()
            dic['num'] = dic['num'].strip()
            csv_write.writerow(dic.values())

    print('结束!')

只需要将循环写入放置开头即可

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7667012
  • 这篇博客你也可以参考下:为什么老说python是伪多线程,怎么解决?
  • 同时,你还可以查看手册:python- 模块搜索路径 中的内容
  • 您还可以看一下 龙豪杰老师的Python网络爬虫课程中的 类的继承小节, 巩固相关知识点
  • 除此之外, 这篇博客: 简单了解Python中的 六、控制语句 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    if语句,当条件成立时运行语句块。经常与else, elif(相当于else if) 配合使用。
    for语句,遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。
    while语句,当条件为真时,循环运行语句块。
    try语句,与except,finally配合使用处理在程序运行中出现的异常情况。
    class语句,用于定义类型。
    def语句,用于定义函数和类型的方法。
    pass语句,表示此行为空,不运行任何操作。
    assert语句,用于程序调试阶段时测试运行条件是否满足。
    with语句,Python2.6以后定义的语法,在一个场景中运行语句块。比如,运行语句块前加密,然后在语句块运行退出后解密。
    yield语句,在迭代器函数内使用,用于返回一个元素。自从Python 2.5版本以后。这个语句变成一个运算符。
    raise语句,制造一个错误。
    import语句,导入一个模块或包。
    from import语句,从包导入模块或从模块导入某个对象。
    import as语句,将导入的对象赋值给一个变量。
    in语句,判断一个对象是否在一个字符串/列表/元组里。
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^