本地变量' bet'在分配之前引用

时间:2016-01-28 03:53:11

标签: python web-crawler

似乎有些网站没有提供可变投注的输出。 提到的网站只是我尝试的网站之一     _

cleaner('http://www.indeed.com/cmp/Akvelon,-Inc./jobs/Software-Database-Engineer-9f35bfbe02577e2a?sjdu=QwrRXKrqZ3CNX5W-O9jEvRFd8FQI4DEv5V74lSpSnHYgnddE4ZyZFNs76EkGRtDwtEmC1g0ZgP9j4kJzAk16Kmc5zfQEpyLY32nEHt1W9y4')
    def _cleaner(websr):
        html = urllib2.urlopen(websr).read()
        soup = BeautifulSoup(html)
        for elm in soup.find("span", id="job_summary").find_all("p"):
            betf = elm.get_text()
        for i in soup.find("span", id="job_summary").find_all("ul"):
            bet = i.get_text(" ")
        return betf+" "+bet

2 个答案:

答案 0 :(得分:1)

soup.find("span", id="job_summary".find_all("p")循环中的列表(for)可能为空,导致betbetf无法分配。您可以预先分配变量以避免此问题:

def _cleaner(website):
    betf = ''
    bet = ''
    html = urllib2.urlopen(website).read()
    soup = BeautifulSoup(html)
    for elm in soup.find("span", id="job_summary").find_all("p"):
        betf = elm.get_text()
    for i in soup.find("span", id="job_summary").find_all("ul"):
        bet = i.get_text()
    return betf+" "+bet

答案 1 :(得分:0)

由于bet的分配位于循环内的try块中,soup.find("span", id="job_summary").find_all("ul")必须为非空,i.get_text()必须至少成功{{1}要分配一个值。如果失败,您应该确定要执行的操作。您可以在bet块中指定默认值,或者只是在循环之前指定一些内容。上面的except也是如此。