打印"无"当找不到价值并继续前进时

时间:2016-10-12 16:10:10

标签: python-3.x beautifulsoup

这是我刮刀的代码:

import urllib
import urllib.request
from bs4 import BeautifulSoup
import re
import os

theurl = "https://www.tripadvisor.com/Hotels-g293810-Malawi-Hotels.html"
thepage = urllib
thepage = urllib.request.urlopen(theurl)

soup = BeautifulSoup(thepage, "html.parser")
data_all = soup.findAll('div', {"class":"listing_info popIndexValidation"})
link = soup.findAll('div', attrs={"class":"listing_title"})

init_data = open('/Users/paribaker/Desktop/scrapping/TripAdvisor/Inv/initdata.txt', 'a')
init_info = []

try:
    for data_all in soup.findAll('div', {"class":"listing_info popIndexValidation"}):
        init_info.append(data_all.find('a', {'class':'property_title'}).text +",\t")
        init_info.append(data_all.find('span', {'class':"more"}).text +",\t")
        init_info.append(data_all.find('div', {'class':"clickable_tags"}).text +",\t")
        init_info.append([img["alt"] for img in data_all.select("img[alt]")])
        init_info.append("\n")

except  AttributeError:
    init_info.append("non")

init_data.write("".join(map(lambda x: str(x), init_info)))
init_data.close

init_data.write("".join(map(lambda x: str(x), init_info)))
init_data.close

这实现了我现在需要的所有功能,我有一个小问题,我似乎无法解决。

我使用try-except块来迭代任何错误。我认为这只会忽略错误print none,然后转到列表中的下一个项目。 相反,一旦它到达没有值的项目,它就会切断代码并突破。

代码遍历我想要附加到列表中的项目列表,在这个特定的页面中,我抓住最后两个的酒店没有评论没有星星或任何类型的东西,所以一旦它到达它获得的第二个酒店并附加名称,但随后不附加任何内容并且中断。 当没有找到值时,如何告诉程序打印无,并继续迭代?

1 个答案:

答案 0 :(得分:1)

当捕获到异常时,代码执行会跳到except块,然后从那里继续。而不是:

try:
    for ...:
        init_info.append(...)
except AttributeError: 
    init_info.append("none")

试试这个:

for ...:
    try ...:
        init_info.append(...)
    except AttributeError: 
        init_info.append("none")