网页内容抓取 php(若是给你一个网页连接,来抓取指定的内容)

优采云 发布时间: 2021-09-26 04:17

  网页内容抓取 php(若是给你一个网页连接,来抓取指定的内容)

  如果给你一个网页链接来捕捉指定的内容,比如豆瓣电影排行榜,你怎么做?html

  事实上,web内容的结构与XML非常相似,因此我们可以通过解析XML来解析HTML,但两者之间仍然存在很大的差距。嗯,没有什么废话。让我们开始解析HTML。ios

  有许多用于解析XML的库。这里选择Libxml进行解析。因为libxml是一个C语言接口,所以我们找到了一个带有Objective-C打包接口的库hpple。它的地址是。然后网页使用豆瓣电影排名,地址是。吉特

  接下来,构建一个新项目。该项目采用Arc,引入了libxml2和hpple库,并创建了实体类*敏*感*词*。完整的项目结构如下:GitHub

  

  下面是movie的实现。这是一个实体类。根据捕获的网页的内容确定web实体

  movie.hobjective-c

  @interface Movie : NSObject

@property(nonatomic, strong) NSString *name;

@property(nonatomic, strong) NSString *imageUrl;

@property(nonatomic, strong) NSString *descrition;

@property(nonatomic, strong) NSString *movieUrl;

@property(nonatomic) NSInteger ratingNumber;

@property(nonatomic, strong) NSString *comment;

@end

  所以最重要的部分来了。无论网页的内容是什么,我们都必须首先获得网页的内容。下面是通过nsurlconnection获取整个网页的内容。排列

  - (void)loadHTMLContent

{

NSString *movieUrl = MOVIE_URL;

NSString *urlString = [movieUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:urlString];

NSURLRequest *request = [NSURLRequest requestWithURL:url];

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

__weak ViewController *weak_self = self;

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

if (nil == error) {

// NSString *retString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

// NSLog(@"%@", retString);

[weak_self parserHTML:data];

}

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

}];

}

  下面是获取网页内容的简单方法。本文不讨论一些HTTP和错误处理。因此,这里的代码相对简单。在上面的代码中,有一种parserhtml方法:解析获得的网页内容。在解析网页内容之前,请先拆下XPath。应用程序

  假设一个简单的网页收录以下内容:atom

  

 

    Some webpage

 

 

    <p class=”normal”>This is the first paragraph

   

  This is the second paragraph. This is in bold.

   </p>

  例如,如果要获取title的内容,XPath表达式为/HTML/head/title。如果要获取class=“special”节点的内容,XPath是/HTML/body/P[@class='special']。网址

  因此,只要找到正确的XPath,就会得到相应的节点内容。让我们看一下用HPPER

  解析HTML。

  - (void)parserHTML:(NSData *)data

{

if (nil != data) {

TFHpple *movieParser = [TFHpple hppleWithHTMLData:data];

NSString *movieXpathQueryString = @"/html/body/div[@id='wrapper']/div[@id='content']/div[@class='grid-16-8 clearfix']/div[@class='article']/div[@class='indent']/table/tr/td/a[@class='nbg']";

NSArray *movieNodes = [movieParser searchWithXPathQuery:movieXpathQueryString];

for (TFHppleElement *element in movieNodes) {

Movie *m = [[Movie alloc] init];

m.name = [element objectForKey:@"title"];

m.movieUrl = [element objectForKey:@"href"];

for (TFHppleElement *child in element.children) {

if ([child.tagName isEqualToString:@"img"]) {

@try {

m.imageUrl = [child objectForKey:@"src"];

}

@catch (NSException *exception) {

}

}

}

[self.movies addObject:m];

}

[self.movieTableView reloadData];

}

}

  在代码的首页中找到相应节点的路径,然后使用XPathQuery搜索以获得数组。遍历组织数据后,可以在表视图中显示。具体效果如下:

  

  嗯,网络内容已经被捕获。具体的实际项目比这更复杂。所以,这只是一个指导性的例子

  参考:

  注:本文为萧涵原著。请支持原创作品!如需重印,请附上原创链接:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线