Python 板


LINE

小弟目前正在撰写计算从网页A到其他网站内连结的level, 采用的方式就是在各网页内直接抓取'href', 当我将最高level设定在2时,没有任何问题, 但当我将其设定为3时,会跑出错误讯息如下: UnboundLocalError: local variable 'soup' referenced before assignment 请问高手可以帮忙看看问题出在哪里吗?谢谢! 程式码如下: import lxml.html import urllib.request from bs4 import BeautifulSoup foundUrls = {} for rootUrl in rootUrls: foundUrls.update({rootUrl : 0}) def getProtocolAndDomainName(url): protocolAndOther = url.split('://') # splitting url by '://' and retrun a list ptorocol = protocolAndOther[0] domainName = protocolAndOther[1].split('/')[0] # this will only return 'https://xxxxx.com' return ptorocol + '://' + domainName stopLevel = 3 ## 此处若改为2时不会有任何问题 rootUrls = ['http://ps.ucdavis.edu/'] foundUrls = {} for rootUrl in rootUrls: foundUrls.update({rootUrl : 0}) def getProtocolAndDomainName(url): protocolAndOther = url.split('://') ptorocol = protocolAndOther[0] domainName = protocolAndOther[1].split('/')[0] return ptorocol + '://' + domainName def crawl(urls, stopLevel = 5, level=1): nextUrls = [] if (level <= stopLevel): for url in urls: # need to handle urls (e.g., https) that cannot be read try: openedUrl = urllib.request.urlopen(url) soup = BeautifulSoup(openedUrl, 'lxml') except: print('cannot read for :' + url) for a in soup.find_all('a', href=True): href = a['href'] if href is not None: # for the case of a link is relative path if '://' not in href: href = getProtocolAndDomainName(url) + href # check url has been already visited or not if href not in foundUrls: foundUrls.update({href : level}) nextUrls.append(href) # recursive call crawl(nextUrls, stopLevel, level + 1) crawl(rootUrls, stopLevel) print(foundUrls) --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.225.30.106
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1504340414.A.5F1.html
1F:→ stucode: 错误讯息已经说了 你还没有给soup值就用了它 09/02 22:05
2F:→ stucode: 只要想想什麽情况下会没给soup值就知道问题在哪了 09/02 22:07
3F:推 Sunal: execption处理还可以再好一点 09/02 22:59
4F:→ TZULIU: 应该是有几个转换过的url无法用BeautifulSoup开启 09/03 15:15
5F:→ TZULIU: 我现在处理的方式是在crawl函数底下多写一行 09/03 15:25
6F:→ TZULIU: global soup,虽然解决的问题但不确定是不是一个好的方法 09/03 15:26
7F:→ TZULIU: 我也有想过在openedUrl = urllib.request.urlopen(url) 09/03 15:26
8F:→ TZULIU: 底下放一个try-except而不是使用global soup 09/03 15:27
9F:→ TZULIU: 请问有高手可以给点意见吗?谢谢! 09/03 15:27
10F:→ wennie0433: 把处理过的url印出来看看?看哪个会错? 09/03 16:04
11F:→ stucode: 用global等於是把soup摆到global symbol table去 09/03 16:14
12F:→ stucode: 看起来解决问题只是碰巧没有出错而已 09/03 16:14
13F:→ stucode: 比较正确的方法是 当发现取得或解析网页失败的时候 09/03 16:15
14F:→ stucode: 就做好流程控制 不要再去使用soup变数 09/03 16:15
15F:→ stucode: 因为它根本就没有被填入应有的内容 09/03 16:15







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP