| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1459 人关注过本帖
标题:为什么会出错???
只看楼主 加入收藏
周煜
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2018-7-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
为什么会出错???
程序代码:
import re
import requests as r
import pymongo as pmg

client = pmg.MongoClient('localhost', 27017)
mydb = client['mydb']
b = mydb['编程论坛-python']
g = b.insert_one
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\
/537.36(KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}

def get_urls_and_titles(url):
    html = r.get(url, headers=headers).text
    urls = re.findall('<a href="(.*?)" title="发帖时间:', html)
    titles = re.findall('<a href="thread-.*?">(.*?)</a>', html)
    urls = sets(urls)
    for i in range(4):
        del titles[1]
    titles = tuple(titles)
    write((titles, urls, ('title', 'url')))
def sets(things):
    a = set(things)
    a = tuple(a)
    return a
def write(*args):
    for each in args:
        for infos1, infos2, info3 in each[0], each[1], each[2]:
            for info1, info2 in infos1, infos2:
                info = {
                    info3[0]: info1,
                    info3[1]: info2
                    }
                g(info)

if __name__ == '__main__':
    get_urls_and_titles('http://bbs.bccn.net/forum-246-1.html')

完了就报错:

Traceback (most recent call last):
  File "E:/360Downloads/周煜/Python/程序/b.py", line 38, in <module>
    get_urls_and_titles('http://bbs.bccn.net/forum-246-1.html')
  File "E:/360Downloads/周煜/Python/程序/b.py", line 22, in get_urls_and_titles
    write((titles, urls, ('title', 'url')))
  File "E:/360Downloads/周煜/Python/程序/b.py", line 29, in write
    for infos1, infos2, info3 in each[0], each[1], each[2]:
ValueError: too many values to unpack (expected 3)
搜索更多相关主题的帖子: html url for write File 
2018-08-08 17:46
外部三电铃
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:那一年
等 级:贵宾
威 望:57
帖 子:2013
专家分:7306
注 册:2007-12-17
收藏
得分:20 
def write(*args):
    for each in args:
        print len(each[0])    //50
        print len(each[1])    //50
        print len(each[2])    //2
        for infos1, infos2, info3 in each[0], each[1], each[2]:
            for info1, info2 in infos1, infos2:
                info = {
                    info3[0]: info1,
                    info3[1]: info2
                    }
                print(info)
========================================================
加了上面那3行后发现,each[0], each[1], each[2]长度不一样,后面的已经循环完了,前面的还继续循环。

尽量不要把多个for循环放在一行里面,这样看上去代码行数变少了,其实更难理解了。分开写会好理解一些,也更健壮。


[此贴子已经被作者于2018-8-8 17:58编辑过]


那一年,苍井空还是处女
2018-08-08 17:57
周煜
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2018-7-12
收藏
得分:0 
改成了
程序代码:
def write(*args):
    for each in args:
        for infos1, infos2 in each[0], each[1]:
            for info1, info2 in infos1, infos2:
                info = {
                    'title': info1,
                    'url': info2
                    }
                g(info)

还是会出同样的错误
2018-08-09 10:36
周煜
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2018-7-12
收藏
得分:0 
我找到解决办法了:
程序代码:
def write(*args):
    for each in args:
        for infos1, infos2 in zip(each[0], each[1]):
            for info1, info2 in zip(infos1, infos2):
                info = {
                    'title': info1,
                    'url': info2
                    }
                g(info)
2018-08-09 15:49
快速回复:为什么会出错???
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018588 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved