java jsoup怎样爬取特定网页内的数据

java jsoup怎样爬取特定网页内的数据,第1张

1、Jsoup简述

Java中支持的爬虫框架有很多,比如WebMagic、Spider、Jsoup等。

​ Jsoup拥有十分方便的api来处理html文档,比如参考了DOM对象的文档遍历方法,参考了CSS选择器的用法等等,因此我们可以使用Jsoup快速地掌握爬取页面数据的技巧。

2、快速开始

1)分析HTML页面,明确哪些数据是需要抓取的

2)使用HttpClient读取HTML页面

HttpClient是一个处理Http协议数据的工具,使用它可以将HTML页面作为输入流读进java程序中.

3)使用Jsoup解析html字符串

通过引入Jsoup工具,直接调用parse方法来解析一个描述html页面内容的字符串来获得一个Document对象。该Document对象以 *** 作DOM树的方式来获得html页面上指定的内容。

3、保存爬取的页面数据

1)保存普通数据到数据库中

将爬取的数据封装进实体Bean中,并存到数据库内。

2)保存图片到服务器上

直接通过下载图片的方式将图片保存到服务器本地。

HTML是无法读取数据库的,HTML是页面前端脚本语言,要想从HTML网页中获取SQL数据库里的数据,需要借助JSP或ASP或PHP或RUBY等语言来实现。

SQL数据库的数据体系结构基本上是三级结构,但使用术语与传统关系模型术语不同。在SQL中,关系模式(模式)称为“基本表”(base table);存储模式(内模式)称为“存储文件”(stored file);子模式(外模式)称为“视图”(view);元组称为“行”(row);属性称为“列”(column)。

扩展资料

SQL语言的组成:

1、一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。

2、一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。

3、一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。

4.一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。

5.用户可以用SQL语句对视图和基本表进行查询等 *** 作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。

6.SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL和Ada语言等。

参考资料:百度百科▬SQL数据库

给一个例子你看看吧.

if($pro_list_contents=@file_get_contents('http://www.phoenix-luxury.com/louis-vuitton-c-82.html'))

{

preg_match_all("/<td width=\"50%\" valign=\"top\">(.*)<td width=\"10\"><img src=\"images\/spacer.gif\"/isU", $pro_list_contents, $pro_list_contents_ary)

for($i=0$i<count($pro_list_contents_ary[1])$i++)

{

preg_match_all("/<a href=\"(.*)\"><img src=\"(.*)\".*<span>(.*)<\/span>/isU", $pro_list_contents_ary[1][$i], $url_img_price)

$url=addslashes($url_img_price[1][0])

$img=str_replace(' ', '20%', trim('http://www.phoenix-luxury.com/'.$url_img_price[2][0]))

$price=(float)str_replace('$', '', $url_img_price[3][0])

preg_match_all("/<a class=\"ml1\" href=\".*\">(.*)<\/a>/isU", $pro_list_contents_ary[1][$i], $proname_ary)

$proname=addslashes($proname_ary[1][0])

include("inc/db_connections.php")

$rs=mysql_query("select * from pro where Url='$url' and CateId='{$cate_row['CateId']}'")//是否已经采集了

if(mysql_num_rows($rs))

{

echo "跳过:{$url}<br>"

continue

}

$basedir='/u_file/pro/img/'.date('H/')

$save_dir=Build_dir($basedir)//创建目录函数

$ext_name = GetFileExtName( $img )//取得图片后辍名

$SaveName = date( 'mdHis' ) . rand( 10000, 99999 ) . '.' . $ext_name

if( $get_file=@file_get_contents( $img ) )

{

$fp = @fopen( $save_dir . $SaveName, 'w' )

@fwrite( $fp, $get_file )

@fclose( $fp )

@chmod( $save_dir . $SaveName, 0777 )

@copy( $save_dir . $SaveName, $save_dir . 'small_'.$SaveName )

$imgpath=$basedir.'small_'.$SaveName

}

else

{

$imgpath=''

}

if($pro_intro_contents=@file_get_contents($url))

{

preg_match_all("/<\/h1>(.*)<\/td><\/tr>/isU", $pro_intro_contents, $pro_intro_contents_ary)

$p_contents=addslashes(str_replace('src="', 'src="http://www.phoenix-luxury.com', $pro_intro_contents_ary[1][0]))

$p_contents=SaveRemoteImg($p_contents, '/u_file/pro/intro/'.date('H/'))//把远程html代码里的图片保存到本地

}

$t=time()

mysql_query("insert into pro(CateId, ProName, PicPath_0, S_PicPath_0, Price_0, Contents, AddTime, Url) values('{$cate_row['CateId']}', '$proname', '$imgpath', '$img', '$price', '$p_contents', '$t', '$url')")

echo $url.$img.$cate."<br>\r\n"

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10028951.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存