账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    为什么paraseHTML函数那块,我如果一开始让ulist = [],就没有输出了,反倒去除了之后就有了。望大佬点拨。
    33
    0
    import requests
    from lxml import etree
    
    def getHTML(url):
        try:
            r = requests.get(url,timeout=30)
            r.raise_for_status()
            r.encoding = r.apparent_encoding
            return r.content
        except:
            print('抓取失败')
    
    def paraseHTML(ulist,html): 
        demo = etree.HTML(html)
        selc=demo.xpath('//div[@class="info"]')
        #ulist = [] 有这句就没有输出,为什么?
        #序号
        i = 0
        for a in selc:
            i=i+1
            #导演那部分是以换行符分开的
            #电影名
            title = a.xpath('./div[@class="hd"]/a/span[@class="title"]/text()')[0]
            infos = a.xpath('./div[@class="bd"]/p[@class=""]/text()')
            #导演
            direct = infos[0].strip().replace(u'\xa0','  ').split('  ')[0].split(':')[1]
            date_country_classify = infos[1].strip().replace(u'\xa0','  ').split('  ')
            #上映年份
            year = date_country_classify[0]
            #国家
            country =  date_country_classify[2]
            #类型
            classify = date_country_classify[4]
            #点评
            comment = a.xpath('./div[2]/p/span/text()')[0]
            #豆瓣评分
            rank = a.xpath('./div[2]/div/span[2]/text()')[0]
    
            ulist.append([title,direct,year,country,classify,comment,rank])
    
    def printHTML(ulist):
        print_templet = '{:5}:{:<10}'
        for g in ulist:
            #print(print_templet.format('排名',i+1))
            print(print_templet.format('电影名称',g[0],chr(12288)))
            print(print_templet.format('导演',g[1],chr(12288)))
            print(print_templet.format('上映年份',g[2],chr(12288)))
            print(print_templet.format('国家',g[3],chr(12288)))
            print(print_templet.format('分类',g[4],chr(12288)))
            print(print_templet.format('一句话点评',g[5],chr(12288)))
            print(print_templet.format('豆瓣评分',g[6],chr(12288)))
            print("------------------------------------")
    
    
    def main():
        url = 'https://movie.douban.com/top250?start='
        list_info = []
        html = getHTML(url)
        paraseHTML(list_info,html)
        printHTML(list_info)
    
    main()
            
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • ζ旧梦已逝ζ 普通会员 1楼

      ParaseHTML是Google提供的一个用于创建HTML代码的工具。它的基本原理是将一个HTML代码的文本内容转为一个简单的HTML标签列表。这个函数不会改变原有的HTML代码,而是返回一个新的HTML代码。

      然而,这个函数在某些情况下可能会改变原有的HTML代码。这可能是由于你对ParaseHTML的使用方式不正确,或者你尝试用ParaseHTML来创建一个包含多个HTML标签的元素。

      例如,如果你尝试将一个包含多个HTML标签的元素传递给ParaseHTML,ParaseHTML可能会在输出的HTML代码中改变原有的元素。例如,如果你试图将一个包含多个<li>标签的列表传递给ParaseHTML,ParaseHTML可能会将这些列表视为一个单独的HTML标签,而不是将它们视为一个包含多个<li>标签的列表。

      如果你不希望ParaseHTML改变原有的HTML代码,你应该在使用ParaseHTML之前,先明确地告诉ParaseHTML你想要创建的HTML代码。例如,你可以这样写:

      javascript var ulList = []; var paraseHTML = ParaseHTML(function(html) { ulList = html.split('<ul>'); }); paraseHTML('<li>Item 1</li><li>Item 2</li>');

      在这个例子中,我们首先创建了一个空的ulList数组,然后使用ParaseHTML函数将HTML代码分割成一个包含多个<ul>标签的元素。然后,我们直接使用<li>标签创建了一个列表。这样,ParaseHTML就不会改变原有的HTML代码。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部