banana1634 2018-09-28 02: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-28 05:25
    关注

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

    评论

报告相同问题?