java爬虫怎么抓取js动态生成的内容
我用Jsoup写爬虫,一般遇到html返回没有的内容。但是浏览器显示有的内容。都是分析页面的http请求日志。分析页面JS代码来解决。
1、有些页面元素被隐藏起来了-换selector解决
2、有些数据保存在js/json对象中-截取对应的串,分析解决
3、通过api接口调用-伪造请求获得数据
还有一个终极方法
4、使用phantomjs或者casperjs这种headless浏览器
如何抓取网页中的动态数据
首先明确我指的动态数据是什么。
名词定义:动态数据在这里指的是网页中由Javascript动态生成的页面内容,即网页源文件中没有,在页面加载到浏览器后动态生成的。
下面进入正题。
抓取静态页面很简单,通过Java获取到html源码,然后分析源码即可得到想要的信息。如获取中国天气网中杭州的天气,只需要找到对应的html页面()。
假设我需要输入城市名称获取改城市的天气,数据源还是采用中国天气网。首先要做的是根据城市找到对应的页面。通过简单分析发现,城市与页面的URL有对应,如杭州对应101210101,所以程序的关键就是找到城市与页面的对应关系。
发现该网站的搜索框有中国大多数城市的链接,可以得到城市与_id的对应关系。找到突破口,开始行动。进入首页,查看其源代码,找到搜索框所在位置。
原来数据是通过Javascript动态加进去的,用Chrome的inspect element看到以下内容。
目前可以做的是利用Chrome将html复制到文件,然后解析该文件得到城市与URL的关系。问题是万一网站的城市与URL对应关系有变化,这就很被动还需改程序。
现在的问题是如何用Java获取Javascript动态生成的html内容,不知大家有什么看法。
Java_爬虫,如何抓取Js动态生成数据的页面?
用nodejs+puppeteer,解析dom结构获取,或者直接观察返回数据的接口,看能不能直接调用
怎样用java代码动态生成数据库表
Class.forName(“oracle.jdbc.driver.OracleDriver”);
Connection conn=DriverManager.getConnection(“数据库url”,”帐号”,”密码”);
state=conn.createStatement();
state.executeUpdate(“create 建表语句”);
state.executeUpdate(“insert 插入数据”)——插入的值由页面获得,注意字符串拼接。
然后就是关闭连接,state.close();conn.close();
核心代码就是这些,具体应用你可以多写几个方法(增删改查),都是类似的,注意异常的处理,关闭连接最好在finally中进行。