名词定义:动态数据在这里指的是网页中由Javascript动态生成的页面内容,即网页源文件中没有,在页面加载到浏览器后动态生成的。
下面进入正题。
抓取静态页面很简单,通过Java获取到html源码,然后分析源码即可得到想要的信息。如获取中国天气网中杭州的天气,只需要找到对应的html页面(http://www.weather.com.cn/weather/101210101.shtml)。
假设我需要输入城市名称获取改城市的天气,数据源还是采用中国天气网。首先要做的是根据城市找到对应的页面。通过简单分析发现,城市与页面的URL有对应,如杭州对应101210101,所以程序的关键就是找到城市与页面的对应关系。
发现该网站的搜索框有中国大多数城市的链接,可以得到城市与_id的对应关系。找到突破口,开始行动。进入首页,查看其源代码,找到搜索框所在位置。
原来数据是通过Javascript动态加进去的,用Chrome的inspect element看到以下内容。
目前可以做的是利用Chrome将html复制到文件,然后解析该文件得到城市与URL的关系。问题是万一网站的城市与URL对应关系有变化,这就很被动还需改程序。
现在的问题是如何用Java获取Javascript动态生成的html内容,不知大家有什么看法。
这个问题问的太宽泛jdbc, hibernate都可以啊 hibernate也是封装了jdbc的 用起来更方便点
随便贴个jdbc连接SQL的例子吧
JSP连接SQL Server7.0/2000数据库
testsqlserver.jsp如下:
<%@ page contentType="text/htmlcharset=gb2312"%>
<%@ page import="Java.sql.*"%>
<html>
<body>
<%Class.forName("com.microsoft.JDBC.sqlserver.SQLServerDriver").newInstance()
String url="jdbc:microsoft:sqlserver://localhost:1433DatabaseName=pubs"
//pubs为你的数据库的
String user="sa"
String password=""
Connection conn= DriverManager.getConnection(url,user,password)
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE)
String sql="select * from test"
ResultSet rs=stmt.executeQuery(sql)
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库 *** 作成功,恭喜你")%>
<%rs.close()
stmt.close()
conn.close()
%>
</body>
</html>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)