java爬虫初试(三)有关Selenium RC的知识
总体介绍一下:学长发的链接有
1.Selenium的大概介绍;2.selenium的一个博客,挺多实用性文章点击打开链接;
3.如何解析一个HTML字符串;http://www.open-open.com/jsoup/parse-document-from-string.htm
4.java 网页解析工具包 Jsoup 超时异常:java.net.SocketTimeoutException:Read timed out;点击打开链接
5.Java网页数据抓取实例点击打开链接
在网页数据采集的时候,我们往往要经过这几个大的步骤:
①通过URL地址读取目标网页②获得网页源码③通过网页源码抽取我们要提取的目的数据④对数据进行格式转换,获得我们需要的数据。
6.
Java - 正则表达式的运用(Pattern模式和Matcher匹配)
7.点击打开链接
Jsoup简介——使用Java抓取网页数据
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。jsoup的主要功能如下:
(1) 从一个URL,文件或字符串中解析HTML;
(2) 使用DOM或CSS选择器来查找、取出数据;
(3) 可操作HTML元素、属性、文本;
8.点击打开链接
XPath实例//还不知道在哪里用的
9.点击打开链接
Selenium Webdriver元素定位的八种常用方式
点击打开链接java selenium (五) 元素定位大全(写的更好)
10.点击打开链接Selenium2(java)selenium常用API 四(也写得很好)
1.Selenium RC分为两部分。
Selenium服务器启动和终止,除了它的浏览器解释并执行Selenese命令。它也通过拦截和验证器和测试的应用程序之间传递的HTTP消息作为HTTP代理。
客户端库,它提供了编程语言(Java,C#,Perl,Python和PHP)和Selenium-RC服务器中的每一个之间的接口。
2.随笔分类 -selenium点击打开链接
里面有
Selenium模拟JQuery滑动解锁、
selenium操作隐藏的元素、
selenium处理select标签的下拉框、
自动化测试如何解决验证码的问题
3.http://www.open-open.com/jsoup/parse-document-from-string.htm
解析一个HTML字符串
存在问题
来自用户输入,一个文件或一个网站的HTML字符串,你可能需要对它进行解析并取其内容,或校验其格式是否完整,或想修改它。怎么办?jsonu能够帮你轻松解决这些问题
解决方法
使用静态Jsoup.parse(String html)
方法或 Jsoup.parse(String html, String baseUri)
示例代码:
String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
描述
parse(String html, String baseUri)
这方法能够将输入的HTML解析为一个新的文档 (Document),参数 baseUri 是用来将相对 URL 转成绝对URL,并指定从哪个网站获取文档。如这个方法不适用,你可以使用 parse(String html)
方法来解析成HTML字符串如上面的示例。.
只要解析的不是空字符串,就能返回一个结构合理的文档,其中包含(至少) 一个head和一个body元素。
一旦拥有了一个Document,你就可以使用Document中适当的方法或它父类 Element
和Node
中的方法来取得相关数据。
4.点击打开链接
今天做了一个Jsoup解析网站的项目,使用Jsoup.connect(url).get()连接某网站时偶尔会出现
java.net.SocketTimeoutException:Read timed out异常。
原因是默认的Socket的延时比较短,而有些网站的响应速度比较慢,
所以会发生超时的情况。
解决方法:
链接的时候设定超时时间即可。
try{
doc = Jsoup.connect(url).timeout(5000).get();
}
catch(Exception e){
e.printStackTrace();
}
5.
- static Pattern proInfo
- = Pattern.compile("<div>(.*?)</div>\\s*<div>(.*?)</div>\\s*<div>(.*?)</div>\\s*<div>(.*?)</div>\\s*<div>(.*?)</div>", Pattern.DOTALL);
- private static List<Product> getDataStructure(String str) {
- //运用正则表达式对获取的网页源码进行数据匹配,提取我们所要的数据,在以后的过程中,我们可以采用httpclient+jsoup,
- //现在暂时运用正则表达式对数据进行抽取提取
- String[] info = str.split("</li>");
- List<Product> list = new ArrayList<Product>();
- for (String s : info) {
- Matcher m = proInfo.matcher(s);
- Product p = null;
- if (m.find()) {
- p = new Product();
- //设置产品型号
- String[] ss = m.group(1).trim().replace(" ", "").split(">");
- p.setProStyle(ss[1]);
- //设置产品数量
- p.setProAmount(m.group(2).trim().replace(" ", ""));
- //设置产品报价
- p.setProPrice(m.group(4).trim().replace(" ", ""));
- //设置产品供应商
- p.setProSupplier(m.group(5).trim().replace(" ", ""));
- list.add(p);
- }
- }
- //这里对集合里面不是我们要提取的数据进行移除
- list.remove(0);
(.*?)
?涉及到贪婪模式 当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。 有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧: a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)