python和webscraping有点新鲜 - 希望它只是我在语法上缺少的东西。尝试通过类似的问题阅读,但来源中的元素我可能会有点不同。试图在本质上刮掉3个元素:
'工作室' ' 386 SQ。 FT。 |每月分期付款1030美元起和, ' 1030'来自以下内容:
<div class="fp-info has-description">
<div class="row">
<div class="fp-title col-lg-7">
<h4 class="title">Studio</h4>
</div>
<div class="fp-avil col-lg-5">
<p class="small fp-avail-sum"><i class="fa fa-check-circle"></i> Available</p>
</div>
</div>
<p>386 SQ. FT. | Starting at $1030 Per Monthly Installment</p>
<div class="clear"></div>
<div class="fp-description">
<div class="icon-box effect small clean">
<div class="icon"><a href="#"><i class="fa fa-info-circle"></i></a></div>
<p class="text-uppercase"><small>Smart Housing Only.</small></p>
</div>
</div>
和我用来刮掉它的代码是:
def scrape(key, val):
if 'http' not in val:
val = 'http://' + val
plans = []
try:
soup = getWebData(val)
except:
plans
for plan in soup.find_all('div',{'class':'fp-info has-description'}):
room_type = plan.find(class_="title").text
price = plan.find('p').text.strip()
price_formatted = '$'.join(re.findall(r'\d+,?\d+\.\d+',price))
plans.append((room_type))
return plans
编辑 - 我得到的完整回溯错误是: for scrape in scrape(key,keyLinkMap [key]):File&#34; C:\ Users \ Michael \ Desktop \ Python Tests \ edrScraper.py&#34;,40行,在scrape 计划在soup.find_all(&#39; div&#39;,{&#39; class&#39;:&#39; fp-info has-description&#39;}): UnboundLocalError:局部变量&#39;汤&#39;在分配前引用
有什么想法?我有一个类似的刮刀,我遗留下来做了一些非常相似的东西,但它的工作正常。非常感谢任何帮助,谢谢!
答案 0 :(得分:0)
问题出在这些方面:
try:
soup = getWebData(val)
except:
plans
当getWebData(val)
抛出异常时,变量soup
不会被赋予任何值。因此,当您在soup.find_all(...)
使用它时,您正在使用尚未定义的变量soup
。因此,消息&#34;本地变量&#39;汤&#39;在转让之前引用&#34;。
您可以通过执行此类操作来纠正此问题
try:
soup = getWebData(val)
except:
return plans
此处,如果抛出异常,程序将无法访问soup.find_all(...)
声明。