for循环后,字典内输出内容没有改变

问题:输出的字典内容没有新增,
每一页的内容都应该保存在字典里,
但字典内容输入一直为第一页的内容.
求帮助!!

import requests
import re
class Dytt_pa(object):
    def __init__(self):
        self.file_dict = {}
    def get_page(self,url='https://www.dytt8.net/html/gndy/dyzz/list_23_1.html'): # 定义缺省url为xxx
        """获取电影列表网页源码"""
        headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.62 Safari/537.36"}
        req = requests.get(url,headers=headers)
        req.encoding = 'GBK'
        return req.text
    def get_film_link(self):
        """将迅雷下载地址与电影名保存到字典中"""
        file_list = re.findall(r'<a href="(.*)" class="ulink">(.*)</a>',self.get_page()) # 得到25个(半个电影link和电影名)的list
        for film_link,film_name in file_list:
            page_heard = "https://www.dytt8.net"
            film_link = page_heard + film_link # list中的完整的电影link
            film_download_text = self.get_page(film_link) # 电影详情页源码
            xun_lei = re.search(r'<td style=".*" bgcolor=".*"><a href="(.*)">ftp',film_download_text).group(1) # 正则出迅雷下载地址
            self.file_dict[film_name] = xun_lei
    def start(self):
        num = int(input("请输入你要下载几页:"))
        for numa in range(1,num+1):
            print("正在下载第%d页,请稍后"%numa)
            self.get_page(url='https://www.dytt8.net/html/gndy/dyzz/list_23_%d.html'%numa)
            self.get_film_link()
            print("已下载完第%d页."%numa)
        for a, b in self.file_dict.items():
            print("%s|%s" % (a, b))


if __name__ == '__main__':
    woyaoxiadiany = Dytt_pa()
    woyaoxiadiany.start()






3个回答

由于网络原因,这个脚本没有执行成功,看了一下代码,感觉有疑问的地方:
self.get_page 这个页面爬取操作返回的页面文本内容并没有存储,而是在get_film_link里面又重新请求了一次,此时 URL 可能就是默认的第一页,所以没有其他页的内容。
建议修改逻辑如下:

def __init__(self):
        self.file_dict = {}
        self.pageContent = ''

    def get_page(self,url='https://www.dytt8.net/html/gndy/dyzz/list_23_1.html'): # 定义缺省url为xxx
        """获取电影列表网页源码"""
        headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.62 Safari/537.36"}
        req = requests.get(url,headers=headers)
        req.encoding = 'GBK'
        self.pageContent = req.text

    def get_film_link(self):
        """将迅雷下载地址与电影名保存到字典中"""
        file_list = re.findall(r'<a href="(.*)" class="ulink">(.*)</a>',self.pageContent) # 得到25个(半个电影link和电影名)的list
        for film_link,film_name in file_list:
            page_heard = "https://www.dytt8.net"
            film_link = page_heard + film_link # list中的完整的电影link
            film_download_text = self.get_page(film_link) # 电影详情页源码
            xun_lei = re.search(r'<td style=".*" bgcolor=".*"><a href="(.*)">ftp',film_download_text).group(1) # 正则出迅雷下载地址
            self.file_dict[film_name] = xun_lei

用一个变量保存每一页的记录,在解析时直接取该变量的值。

weixin_41368321
小小白_弟中弟 感谢,明白了,确实我在get_film_link中直接调用了
5 个月之前 回复

def get_film_link(self):
"""将迅雷下载地址与电影名保存到字典中"""
file_list = re.findall(r'(.*)',self.get_page()) # 得到25个(半个电影link和电影名)的list
这一行你没有参数传递所以默认都是你设置的默认参数
url='https://www.dytt8.net/html/gndy/dyzz/list_23_1.html' 所以一直下载第一页

你应该再改一下
get_page 你是有返回值的不过不没有用上。

       x = self.get_page(url='https://www.dytt8.net/html/gndy/dyzz/list_23_%d.html'%numa)
       self.get_film_link(x)

get_film_link这里加个参数传递,把page传进去应该就可以了
def get_film_link(self,x):
"""将迅雷下载地址与电影名保存到字典中"""
file_list = re.findall(r'(.*)',x) # 得到25个(半个电影link和电影名)的list

你也可以自己修改

import requests
import re
class Dytt_pa(object):
def init(self):
self.file_dict = {}
def get_page(self,url='https://www.dytt8.net/html/gndy/dyzz/list_23_1.html'): # 定义缺省url为xxx
"""获取电影列表网页源码"""
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.62 Safari/537.36"}
req = requests.get(url,headers=headers)
req.encoding = 'GBK'
return req.text
def get_film_link(self,req_text):
"""将迅雷下载地址与电影名保存到字典中"""
file_list = re.findall(r'(.*)',req_text) # 得到25个(半个电影link和电影名)的list
for film_link,film_name in file_list:
page_heard = "https://www.dytt8.net"
film_link = page_heard + film_link # list中的完整的电影link
film_download_text = self.get_page(film_link) # 电影详情页源码
xun_lei = re.search(r'

ftp',film_download_text).group(1) # 正则出迅雷下载地址
self.file_dict[film_name] = xun_lei
def start(self):
num = int(input("请输入你要下载几页:"))
for numa in range(1,num+1):
print("正在下载第%d页,请稍后"%numa)
req_text=self.get_page(url='
https://www.dytt8.net/html/gndy/dyzz/list_23_%d.html'%numa)
self.get_film_link(req_text)
print("已下载完第%d页."%numa)
for a, b in self.file_dict.items():
print("%s|%s" % (a, b))

if name == '__main__':
woyaoxiadiany = Dytt_pa()
woyaoxiadiany.start()

#get_film_link(self):
"""将迅雷下载地址与电影名保存到字典中"""
file_list = re.findall(r'(.*)',self.get_page()) # 得到 ,这一部每次调用get_file_link 的时候,都会按默认参数处理get_page,而你的默认参数一直是第一页,所以你获得的内容一直都只有以一页的内容,以上代码已经修改,可以直接使用。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问