当表格在网页中不可用时,编辑BS4以返回无

时间:2016-06-05 15:39:00

标签: python html bs4

以下代码适用于html页面中文本@property (assign, nonatomic) BOOL isMaxed; @property (assign, nonatomic) MKCoordinateSpan lastDelta; self.lastDelta = MKCoordinateSpanMake(0.006, 0.006); - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { if (mapView.mapType != MKMapTypeStandard && self.isMaxed) { [self checkRegionWithDelta:self.lastDelta.longitudeDelta]; } } - (void)checkRegionWithDelta:(float)delta { if (self.mapView.region.span.longitudeDelta < delta) { MKCoordinateRegion region = self.mapView.region; region.span = self.lastDelta; [self.mapView setRegion:region animated:NO]; } else if (self.mapView.region.span.longitudeDelta > delta) { self.isMaxed = NO; } } - (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered { if (mapView.mapType != MKMapTypeStandard && !self.isMaxed) { [self checkToProcess:self.lastDelta.longitudeDelta]; } } - (void)checkToProcess:(float)delta { if (self.mapView.region.span.longitudeDelta < delta) { UIGraphicsBeginImageContext(self.mapView.bounds.size); [self.mapView.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *mapImage = UIGraphicsGetImageFromCurrentImageContext(); [self processImage:mapImage]; } } - (void)processImage:(UIImage *)image { self.mapColor = [self averageColor:image]; const CGFloat* colors = CGColorGetComponents( self.mapColor.CGColor ); [self handleColorCorrection:colors[0]]; } - (void)handleColorCorrection:(float)redColor { if (redColor < 0.29) { self.isMaxed = YES; [self.mapView setRegion:MKCoordinateRegionMake(self.mapView.centerCoordinate, self.lastDelta) animated:YES]; } else { self.lastDelta = self.mapView.region.span; } } - (UIColor *)averageColor:(UIImage *)image { CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); unsigned char rgba[4]; CGContextRef context = CGBitmapContextCreate(rgba, 1, 1, 8, 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); CGContextDrawImage(context, CGRectMake(0, 0, 1, 1), image.CGImage); CGColorSpaceRelease(colorSpace); CGContextRelease(context); if(rgba[3] > 0) { CGFloat alpha = ((CGFloat)rgba[3])/255.0; CGFloat multiplier = alpha/255.0; return [UIColor colorWithRed:((CGFloat)rgba[0])*multiplier green:((CGFloat)rgba[1])*multiplier blue:((CGFloat)rgba[2])*multiplier alpha:alpha]; } else { return [UIColor colorWithRed:((CGFloat)rgba[0])/255.0 green:((CGFloat)rgba[1])/255.0 blue:((CGFloat)rgba[2])/255.0 alpha:((CGFloat)rgba[3])/255.0]; } } 的标记h2,例如https://www.hl7.org/fhir/valueset-account-status.html

"Content Logical definition"

但对于以下不包含带有“&#34;内容逻辑定义&#34;”的网页,例如https://www.hl7.org/fhir/valueset-cpt-all.html会返回以下错误:

def extract_table(url):
                r = requests.get(url)
                soup = BeautifulSoup(r.content, 'lxml')
                h2 = soup.find(lambda elm: elm.name == 'h2' and 'Content Logical   Definition' in elm.text)
                div = h2.find_next_sibling('div')
                return div.find('table')

当网页中没有'NoneType' object has no attribute 'find_next_sibling' 时,如何编辑代码以返回非表格的代码。

1 个答案:

答案 0 :(得分:2)

您可以通过两种常见方式实现:

  • LBYL - look before you leap

    h2 = soup.find(lambda elm: elm.name == 'h2' and 'Content Logical   Definition' in elm.text)
    return div.find_next_sibling('div').find('table') if h2 else None
    
  • EAFP - easier to ask for forgiveness than permission

    try:
        h2 = soup.find(lambda elm: elm.name == 'h2' and 'Content Logical   Definition' in elm.text)
        div = h2.find_next_sibling('div')
        return div.find('table')
    except AttributeError:
        return None