避免使用try/except-when-webscraping-htm

2024-10-03 11:18:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近正在编写一个web scraper,我发现自己嵌套了try/except循环,并依赖错误驱动部分代码,如以下两段:

try:
    reg_title = soup.find('p', {'class': "regnumber-e"}).text
except AttributeError:
    try:
        reg_title = soup.find('p', {'class': "regtitle-e"}).text
    except AttributeError:
        reg_title = soup.find('p', {'class': "Yregnumber-e"}).text

以及

if soup.find_all('p', {'class': "Notice"}):
    try:
        #More code
    except IndexError:
        #More code
        continue
elif (soup.find_all('p', {'class': "ConsolidationPeriod-e"}) or
      soup.find_all('p', {'class': "ConsolidationPeriod"})):
    try:
        text = soup.find('p', {'class': "ConsolidationPeriod-e"}).text
    except AttributeError:
        text = soup.find('p', {'class': "ConsolidationPeriod"}).text
elif soup.find('p', {'class': "Notice-e"}):
    #More code
    continue
else:
    continue

显然我已经删去了部分代码,但是具体的代码在这里是不相关的。一般来说,我糟糕的编码传感器正在关闭,我觉得必须有一个更好的方法来导航不同的html标签时,网页抓取。有什么想法吗


Tags: 代码texttitlemorecodeallfindreg
1条回答
网友
1楼 · 发布于 2024-10-03 11:18:58

你能不能不只是try except所有的代码都捕获多个异常?比如:

try:
    # All your code
    # For exemple 
    # if soup.find_all('p', {'class': "Notice"}):
    #      ...
    # else:
    #      ...
except (AttributeError, IndexError) as e:
    continue

在我看来,对于你试图获取文本的部分地方,一个简单的测试就足够了

比如:

if soup.find('p', {'class': "ConsolidationPeriod-e"}):
    text = soup.find('p', {'class': "ConsolidationPeriod-e"}).get_text()
else:
    text = soup.find('p', {'class': "ConsolidationPeriod"}).text

或:

if soup.find('p', {'class': "regnumber-e"}):
    reg_title = soup.find('p', {'class': "regnumber-e"}).get_text()
elif soup.find('p', {'class': "regtitle-e"}):
    reg_title = soup.find('p', {'class': "regtitle-e"}).get_text()
else:
    reg_title = soup.find('p', {'class': "Yregnumber-e"}).get_text()

相关问题 更多 >