BeautifulSoup - 嵌套Div和Class问题

时间:2018-01-18 16:56:56

标签: python web-scraping beautifulsoup

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;在分配前引用

有什么想法?我有一个类似的刮刀,我遗留下来做了一些非常相似的东西,但它的工作正常。非常感谢任何帮助,谢谢!

1 个答案:

答案 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(...)声明。