banana1634 2018-09-27 18:40 采纳率: 0%
浏览 2994
已结题

append()无法正常的把字典加到数组综合

期望结果: 把遍历的字典放到数组中
在循环内打印每一次循环的结果如下:

图片说明

但是当把每一次循环的结果放到数组中的时候,就每次进去的都是最后一条;

图片说明

期望的结果:返回的list中包含[result1, result2, result3, result4]

代码:

 import requests
from bs4 import BeautifulSoup
def news(url):
    res = requests.get(url)
    res.encoding = 'utf-8'
    soup = BeautifulSoup(res.text,'html.parser')
    contentList = soup.select('.postlist-item')    
    result = {}
    list=[]
    for b in contentList:
        result['subject'] = b.select('h2')[0].text
        result['viewers'] = b.select('.u-floatRight ')[0].select('.post-meta-item')[0].text 
        result['start'] = b.select('.u-floatRight ')[0].select('.post-meta-item')[1].text
        result['thumbsUp'] = b.select('.u-floatRight ')[0].select('.post-meta-item')[2].text
        #print(result)
        list.append(result)
    return list
 url = 'http://www.woshipm.com/category/pmd'
news(url)
  • 写回答

2条回答 默认 最新

  • sgyiii 2018-09-27 21:25
    关注

    因为只定义了一次result = {} ,导致list中所有元素都是同一个result对象,它的值就是最后一次赋值的值。
    把result = {} 移放到for b in contentList:里面,每次建一个新的result对象,就可以解决题主的问题。

    评论
  • weixin_45675331 2020-06-07 00:00
    关注

    我也遇到了类似问题,题主可以试试list.append(result.copy()),楼上解释的很详细,很是感谢。

    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部