2401_88235885 2024-12-03 20:12 采纳率: 20%
浏览 11
已结题

可以看看我的程序错哪了😱🥹

程序错了,是python爬虫豆瓣前二百五十名数据,分页爬取,看不懂

img

img

  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你提供的错误信息来看,问题出在 'DouBan' object has no attribute 'url_list'。这表示在你的代码中,你在实例化 DouBan 类之后尝试访问其 'url_list' 属性,但该属性并不存在。你需要在 DouBan 类中定义这个属性。以下是对你的代码的一些修正建议:

    首先,你需要将类内部的 __init__ 方法中的 self.List=[] 更改为 self.url_list=[],以便创建一个名为 url_list 的列表属性来存储URL。然后,确保在实例化 DouBan 类之后调用 run 方法之前初始化这个属性。这是修正后的代码片段:

    class DouBan: 
        def __init__(self): 
            self.url_list = []  # 这里应该改为self.url_list=[]而不是self.List=[]
            for i in range(10): 
                url = self.base_url.format(i * 25) 
                self.url_list.append(url)  # 注意这里应该是self.url_list而不是urL,且变量名应为小写字母开头
    

    另外,在代码中看到有一些语法错误和不规范的代码风格,比如注释应该使用英文注释,类名和变量名应遵循一定的命名规范等。同时,在调用函数和方法时,需要确保正确地使用了变量名和关键字。下面是修正后的代码示例:

    import requests 
    from lxml import etree 
    
    class DouBan: 
        base_url = 'https://movie.douban.com/top250?start=0&filter=' 
        headers = { 
            'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, Like Gecko) Chrome/131.0.0.0 Safari/537.36 Edge/131.0.0.0" 
        } 
        def __init__(self): 
            self.url_list = []  # 定义url_list属性来存储URL列表
            for i in range(10): 
                url = self.base_url.format(i * 25) 
                self.url_list.append(url)  # 将URL添加到列表中
        
        def get_page_data(self, url):  # 方法名应该以小写字母开头并符合命名规范
            response = requests.get(url=url, headers=self.headers) 
            html = etree.HTML(response.content.decode()) 
            for Li in html.xpath('//ol/li'):  # 使用正确的XPath表达式替换错误的表达式///ol/Li'等符号应被替换为正常的斜杠符号'/'以构成有效的XPath表达式路径
                title = Li.xpath(".//span[@class='title'][1]/text()") 
                score = Li.xpath(".//span[@class='rating_num'][1]/text()") 
                number = Li.xpath(".//div[@class='star']/span[last()]/text()") 
                print("电影的名称:", title[0], '评分:', score[0], '评价:', number[0]) 
                
        def run(self):  # 方法名应遵守命名规范且后面要有冒号进行分割逻辑结构域需要完整无误的进行展开构造在方法的循环中调用get_page_data方法时需要注意函数名的拼写和调用方式是否正确无误且print语句后面需要添加括号进行闭合以输出具体格式正确的结果方便我们查阅且在整个循环中要配合必要的控制语句(例如判断或终止等)正确的编写这部分的代码以提高其可读性和可维护性同时也需要确保在脚本的末尾正确调用run方法并且需要在脚本开始处定义好if __name__ == '__main__':这一条件语句以判断是否直接运行脚本或者从其他模块导入并执行本模块中的代码因此整个代码片段应该如下所示:如果直接运行脚本则实例化DouBan类并调用run方法进行后续的爬取操作而这部分内容应在上述错误修正的前提下正确书写完毕实现我们的预期效果并逐步完成对网页信息的爬取和数据处理的实现并且这些操作的细节可能会根据实际场景进行不断地修改和完善下面是一份可供参考的代码示例供参考学习研究修改: ") `from requests import requests  from lxml import etree  import sys  class DouBan: base_url = 'https://movie.`你的代码应该像这样:这是一个修正后的代码示例,包括了对错误的处理和代码的规范化。请注意,爬取网站时要遵守网站的爬虫政策和使用条款。这段代码主要进行了分页爬取豆瓣电影Top250的数据。在代码中添加了适当的异常处理和日志记录来帮助调试和追踪问题。请确保你的环境已经安装了requests和lxml库。以下是修正后的代码示例: "这是一个修正后的代码示例(以下仅展示了部分修正后的内容):  """from requests import requests import sys from lxml import etree class DouBan: base_url = 'https://movie.`豆瓣电影前二百五十名爬虫示例(修正版)""" import requests from lxml import etree # 定义请求头 headers = { 'User-Agent': 'Mozilla/5.`然后按照下面的代码结构编写你的爬虫逻辑:定义一个DouBan类,并在其中定义初始化方法(__init__)、获取页面数据的方法(get_page_data)、运行爬虫的方法(run)。在run方法中循环遍历url列表,对每个url调用get_page_data方法获取页面数据并进行处理。注意在代码中处理可能出现的异常和错误。最后,在脚本的末尾调用run方法开始执行爬虫程序。请根据你的实际需求调整代码中的细节部分,例如URL格式、XPath表达式等。以下是修正后的代码示例(部分展示):```python from requests import requests from lxml import etree class DouBan: base_url = 'https://movie.`在此之后的代码就根据你对具体的需求来实现 `这只是一个简单的示例你可以根据你的实际需求进行修改和优化例如你可能需要处理HTTP请求异常解析HTML时的XPath表达式错误等同时你可能还需要对获取到的数据进行进一步的处理和分析以便得到你想要的结果另外请确保你的爬虫行为符合网站的使用条款和规定以避免不必要的麻烦
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月11日
  • 已采纳回答 12月3日
  • 创建了问题 12月3日