美丽汤 - 嵌套的 div 和类问题



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(...) 语句。

最新更新