gpt4 book ai didi

java - 使用 Jersey、Tomcat 和 Java 解析网站 - 编码问题

转载 作者:行者123 更新时间:2023-11-28 23:31:51 25 4
gpt4 key购买 nike

这是我的目标:给定一个预定义的顶级域和一个通用搜索 URL,并附加一个作为参数传递的输入查询,下载所述网站的源代码并将其显示在浏览器中。

最终我将利用各种解析技术(子字符串,哈哈)通过 JaxWS + POJO 提取和编码数据,但我需要查看原始 HTML 输出以了解我的程序正确理解其编码。

我已经从 Response 返回变成了简单的 String 返回,因为我得到了乱码编码。我尝试过设置 1000 种不同的编码方式,但似乎都没有关系。

注意:我还使用其他方法来编码数据等,但我已将问题简化为两种麻烦的方法。

public List<String> DownloadResultSource(URL url)
{
List<String> source = new ArrayList<String>();
BufferedReader br;
String curLine = null;

try
{
br = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
while((curLine = br.readLine()) != null)
{
source.add(curLine);
}

return source;
}
catch(Exception ex)
{
return null;
}
}

@GET
@Path("/{parameter}")
//@Produces(MediaType.TEXT_HTML + ";charset=utf-8")
public String searchSites(@PathParam("parameter") String parameter,
@DefaultValue("") @QueryParam("query") String query)
{
//crawl website with specified query
Crawler crawler = new Crawler();

//DEBUG
Host host = hostEnum.STACKOVERFLOW.getHost();
try
{
List<String> source = crawler.DownloadResultSource(new URL(host.getTopLevelDomain() + host.getDefaultSearch(query)));
StringBuilder sb = new StringBuilder();
sb.append(new URL(host.getTopLevelDomain() + host.getDefaultSearch(query)));
for(String line : source)
{
sb.append(line);
}
return sb.toString();
//return Response.status(Response.Status.OK).entity(sb.toString()).build();
}
catch (Exception ex)
{
return ex.toString();
}
// end DEBUG

// ORIGINAL return marshalResponse(crawler.SearchHost(hostEnum.STACKOVERFLOW, query));
}

return null;
}

就像我说的,我得到了乱码输出,少了我附加的原始 URL 行 (sb.append(new URL...)。

下面的示例响应。请记住,它目前是 String,而不是 Response 返回,尽管 Response.....build() 会产生相同的结果:

https://stackoverflow.com/search?q=my+search+query ��}yw�H��������n'�b_�9BKw��t����y�����$#Py��|��VHh9�[��AQw��������o�[�~�A�d��==!t3����6L��q�q}}��|�i��R��/:��IT#Oa�={����'6"Or����:��� �A�]��q9��i-

潜在的曲线球:我正在通过 Eclipse 在 Windows 上进行开发,尽管 Tomcat 服务器位于 Ubuntu 服务器上,但我使用 HTML 管理器来提升代码。也许 Ubuntu 上缺少对 UTF-8 的支持?我不这么认为,但我已经无计可施了。

编辑 - 更多信息:该项目是Maven项目,这里是Pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my package</groupId>
<artifactId>my project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.9</version>
</dependency>
</dependencies>
</project>

我的 Web.xml 指定 UTF-8,因此: <?xml version="1.0" encoding="UTF-8"?>

最佳答案

我找到的解决方案(不是我想要的解决方案)是该网站负责发回乱码。我尝试了一个类似的网站,它按预期返回了源代码。

没有多少指定的 cookie 或用户代理会改变我对第一个站点的结果,因此我得出结论,这是爬虫故意混淆数据。

关于java - 使用 Jersey、Tomcat 和 Java 解析网站 - 编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29446800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com