python和网络抓取有点新 - 希望它只是我在语法上缺少的东西。 尝试阅读类似的问题,但我正在抓取的源中的元素可能略有不同。 试图从本质上抓取 3 个元素:
"工作室"'386 平方呎 |每月分期付款 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 plan in scrape(key,keyLinkMap[key](:文件 "C:\Users\Michael\Desktop\Python Tests\edrScraper.py",第 40 行,在抓取中对于 soup.find_all('div',{'class':'FP-info has-description'}(中的计划:UnboundLocalError:赋值前引用的局部变量"soup">
有什么想法吗? 我有一个类似的刮刀,我被遗赠了,它做了一些非常相似的事情,但它工作得很好。 任何帮助将不胜感激,谢谢!
问题出在这些行上:
try:
soup = getWebData(val)
except:
plans
当getWebData(val)
引发异常时,不会为变量soup
分配任何值。因此,当您在此处使用它时 soup.find_all(...)
,您使用的是尚未定义的变量soup
。因此,消息"局部变量'soup'在赋值前引用"。
您可以通过执行以下操作来纠正此问题
try:
soup = getWebData(val)
except:
return plans
在这里,如果引发异常,程序将不会到达 soup.find_all(...)
语句。