我该如何删除这些:
<td> </td>
Run Code Online (Sandbox Code Playgroud)
要么
<td width="7%"> </td>
Run Code Online (Sandbox Code Playgroud)
来自我的JSoup'文档'?我尝试了很多方法,但是这些不间断的空格字符与普通的JSoup表达式或选择器不匹配.
我正在尝试创建一个应用程序来从网站上的多个页面中删除内容.我正在使用JSoup进行连接.这是我的代码:
for (String locale : langList){
sitemapPath = sitemapDomain+"/"+locale+"/"+sitemapName;
try {
Document doc = Jsoup.connect(sitemapPath)
.userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
.timeout(10000)
.get();
Elements element = doc.select("loc");
for (Element urls : element) {
System.out.println(urls.text());
}
} catch (IOException e) {
System.out.println(e);
}
}
Run Code Online (Sandbox Code Playgroud)
一切都在大部分时间都很完美.但是,我希望能够做一些事情.
首先,有时404状态将返回或500状态可能是301.使用下面的代码,它将只打印错误并移动到下一个URL.我希望能够做的是尝试返回所有链接的url状态.如果页面连接打印200,如果不打印相关的状态代码.
其次我有时会发现这个错误"java.net.SocketTimeoutException:read timed out"我可以增加我的超时但是我宁愿尝试连接3次,在第3次失败时我想将URL添加到"失败"数组所以我可以在将来重试失败的连接.
知识比我更多的人可以帮助我吗?
我正在开展一个项目,我试图从互联网上获取财务报表,并在JAVA应用程序中使用它们来自动创建比率和图表.
我使用的网站使用登录名和密码来访问表.
标签是TBODY,但html中有另外两个TBODY.
如何使用java将我的表打印到txt文件,然后我可以在我的应用程序中使用?最好的方法是什么,我应该阅读什么?
我在Jsoup中处理的一些网页很重."重"是指页面要么包含大量HTML(假设页面已经下载了),要么在同一文档上需要多次迭代(通过Jsoup.parse()只创建一次).
出于这个原因,我想向用户呈现一个进度条,其中包含对剩余时间的猜测.
一种方法是仅测量HTML的量(以KB或MB为单位)并提出速度因子(遗憾的是,完全取决于此代码运行的系统的速度).
另一种方法是计算节点数量?
由于这种明显的不确定性,我是在呼唤麻烦吗?
有更好的方法处理这个的想法?
我想替换HTML文件中的一些元素,保持所有其他内容不变.
Document doc = Jsoup.parse("<div id=title>Old</div >\n" +
"<p>1<p>2\n" +
"<table><tr><td>1</td></tr></table>");
doc.getElementById("title").text("New");
System.out.println(doc.toString());
Run Code Online (Sandbox Code Playgroud)
我希望有以下输出:
<div id=title>New</span></div >
<p>1<p>2
<table><tr><td>1</td></tr></table>
Run Code Online (Sandbox Code Playgroud)
相反,我有:
<html>
<head></head>
<body>
<div id="title">New</div>
<p>1</p>
<p>2 </p>
<table>
<tbody>
<tr>
<td>1</td>
</tr>
</tbody>
</table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Jsoup补充说:
我可以将修改后的HTML序列化为原始版本吗?杰里科做到了这一点,但它没有像Jsoup那样提供灵活的DOM操作方法.
我使用Jsoup从URL获取页面.我可以使用以下代码行提取某些id的链接:
Elements links = doc.select("a[href]#title0");
Run Code Online (Sandbox Code Playgroud)
如果我只知道其ID的一部分,例如'title',我该如何找到这些元素.我知道我可以找到所有与href 的链接,然后遍历'链接'并检查它的id是否包含'title'子字符串,但是我想避免这种方法.有没有办法过滤选择器中的链接,并检查它的id是否包含'title'子串?
我有一个关于jsoup的问题,因为lazyload scrollLoader.js我用java代码到达网站,我只列出了50个图像名称jsoup.But在网站上向下滚动时,很多图像不断加载.我的问题是,是否可以将图像数量发布到用于Jsoup.connect() 从网站获取所有图像的网址?
这是网站:http://www.logowik.com
这是网站中脚本的用法:
<script type="text/javascript">
$(document).ready(function(e) {
CalculateColumns();
recordCount = 50;
groupID = "0";
catID = "0";
query = "";
userEntry = "";
groupInterval = "0";
AddEvent(window, "resize", CalculateColumns);
document["scrollLoader"] = new scrollLoader({evn : getGrids, seize : 1});
document["scrollLoader"].DoScroll();
addLogoClickEvent();
});
</script>
Run Code Online (Sandbox Code Playgroud)
我用url发布这个参数:
http://www.logowik.com/index.php?g=1&groupID=1&catID=0
用这个url我得到50个图像,因为recordCount = 50in script.但我无法将此参数发布到网址.为了获得100张图片,我尝试了这个网址: http://www.logowik.com/index.php?recordCount=100&g=1&groupID=1&catID=0
但它没有效果.
谢谢
当Jsoup遇到某些类型的HTML(复杂或不正确)时,它可能会发出格式错误的HTML.一个例子是:
<html>
<head>
<meta name="x" content="y is "bad" here">
</head>
<body/>
</html>
Run Code Online (Sandbox Code Playgroud)
引号应该被转义的地方.当Jsoup解析它时,它会发出:
<html>
<head>
<meta name="x" content="y is " bad"="" here"="" />
</head>
<body></body>
</html>
Run Code Online (Sandbox Code Playgroud)
这不符合HTML或XML.这是有问题的,因为它将在链的下一个解析器中失败.
有没有办法确保Jsoup发出错误消息或(如HtmlTidy)可以输出格式良好的XML,即使它已经丢失了一些信息(毕竟我们现在无法确定什么是正确的).
更新:失败的代码是:
@Test
public void testJsoupParseMetaBad() {
String s = "<html><meta name=\"x\" content=\"y is \"bad\" here\"><body></html>";
Document doc = Jsoup.parse(s);
String ss = doc.toString();
Assert.assertEquals("<html> <head> <meta name=\"x\" content=\"y is \""
+" bad\"=\"\" here\"=\"\" /> </head> <body></body> </html>", ss);
}
Run Code Online (Sandbox Code Playgroud)
我在用:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
其他人似乎有同样的问题: JSoup - 内部属性 的引用答案那里没有帮助我,因为我必须接受我给予的
我有以下代码可以工作,但我只是想知道在Jsoup中是否有可能找出错误的确切原因.
以下返回true(如预期的那样)
private void validateProtocol() {
String html = "<p><a href='https://example.com/'>Link</a></p>";
Whitelist whiteList = Whitelist.basic();
whiteList.addProtocols("a","href","tel");
whiteList.removeProtocols("a","href","ftp");
boolean safe = Jsoup.isValid(html, whiteList);
System.out.println(safe);
}
Run Code Online (Sandbox Code Playgroud)
当我将上面的字符串更改为它返回false(按预期)
String html = "<p><a href='ftp://example.com/'>Link</a></p>";
Run Code Online (Sandbox Code Playgroud)
现在,当我有以下代码时,有两个错误,一个是无效协议,一个是onfocus()链接.
private void validateProtocol() {
String html = "<p><a href='ftp://example.com/' onfocus='invalidLink()'>Link</a></p>";
Whitelist whiteList = Whitelist.basic();
whiteList.addProtocols("a","href","tel", "device");
whiteList.removeProtocols("a","href","ftp");
boolean safe = Jsoup.isValid(html, whiteList);
System.out.println(safe);
}
Run Code Online (Sandbox Code Playgroud)
结果是假的,但有没有办法弄清楚URL的哪一部分是假的?例如 - 错误的协议或错误的方法..?
我有代码,有点像这样
String str = "<element data=\"some <data>\"> >foo< </element>";
Document doc = Jsoup.parse(str, "", Parser.xmlParser());
Run Code Online (Sandbox Code Playgroud)
但JSOUP取消了数据的价值,产生了类似的东西
<element value="some <data>">
>foo<
</element>
Run Code Online (Sandbox Code Playgroud)
如何防止JSOUP取消编码属性值?
jsoup ×10
java ×7
html ×2
html-parsing ×2
android ×1
arrays ×1
connection ×1
javascript ×1
optimization ×1
parsing ×1
performance ×1
post ×1
regex ×1
url ×1
xml ×1