大家看到标题都会想到用
HttpURLConnection去处理,但是我想说的是我在实现时遇到的问题,之前用这段代码总是去忽略出现异常时的信息处理,总是处理成功的时候,当然这样做在抓取站带你内容时一般不会出问题,抓不到大不了就返回空喽;但是当抓取第三方api时,就出现问题了,人家api返回异常时都是以错误形式返回,光处理成功的api返回结果已经获取不到这异常信息了,导致自己也看不到原因,总以为是网络原因造成的,其实则不然。
经过测试,第三方站点api返回成功信息是
getInputStream(),而返回错误信息时是
getErrorStream(),他们最终的解析代码都是一样的,所以我把解析代码从try模块中移到了finally模块中,在try和catch模块中分别获取成功的和异常的inputStream信息即可,最终都在finally里面解析,这样不但处理了成功信息和异常信息,而且还避免了重复代码
public static String fetchContentByUrl(String uri, Boolean isPostMethod) {
if (StringUtils.isEmpty(uri)) {
return null;
}
HttpURLConnection conn = null;
InputStream in = null;
try {
URL u = new URL(uri);
conn = (HttpURLConnection) u.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
if (isPostMethod) {
conn.setRequestMethod("POST");
}
in = conn.getInputStream();
} catch (Exception e) {
in = conn.getErrorStream();
} finally {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[4096];
int r;
while ((r = in.read(buf)) != -1) {
bos.write(buf, 0, r);
}
in.close();
conn.disconnect();
final byte[] data = bos.toByteArray();
String jsonStr = new String(data);
return jsonStr;
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
分享到:
相关推荐
1. **HTTP请求**:在Java中,我们通常使用`HttpURLConnection`或第三方库如Apache HttpClient、OkHttp来发送HTTP请求。通过设置URL、请求方法(GET或POST)、Header参数等,可以定制化请求行为。 2. **HTML解析**:...
Java标准库中的`java.net.HttpURLConnection`或者第三方库如Apache HttpClient、OkHttp都可以实现这一功能。 2. **HTML解析**:获取到网页HTML后,我们需要解析HTML文档以提取URL。可以使用Jsoup库,它提供了简洁的...
例如,`requests.get(url)`可以获取指定URL的网页内容。响应内容通常以字符串形式返回,我们可以将其存储到变量中,便于后续处理。 接下来,解析HTML文档是爬虫的关键步骤。BeautifulSoup是一个强大的库,用于解析...
通过学习这个实例源码,开发者不仅可以掌握基础的网页抓取技术,还能了解到如何结合Java标准库和第三方库来提升效率和准确性。在实际应用中,还需要注意处理异常、设置超时、控制爬虫速度,以及可能需要的分布式爬虫...
Java的标准库并没有内置的HTML解析器,但我们可以使用第三方库如Jsoup。Jsoup提供了一个简单易用的API来解析和操作HTML文档: ```java Document doc = Jsoup.parse(in, "UTF-8", url.toString()); ``` 现在我们有...
这一步通常需要用到Webkit或者Gecko等浏览器引擎,但由于Java本身并不内置这些引擎,我们需要借助第三方库,如HtmlUnit或Headless Chrome(配合Selenium)。这里以HtmlUnit为例,它是一个无头的JavaScript支持的Web...
5. **处理验证码**:对于有验证码的网站,可以使用OCR技术或第三方服务来识别和输入验证码。 最后,值得注意的是,虽然网络爬虫在很多场景下有其用武之地,但必须遵守法律法规,尊重网站的版权,不进行非法数据采集...
Java中可以通过第三方库如proxy-vole来管理和切换IP。 9. **爬虫框架**:除了自定义实现外,Java也有一些成熟的爬虫框架,如WebMagic和Colt,它们封装了许多抓取和解析的细节,让开发更加便捷。 10. **法律法规**...
1. **网络库**:C++标准库本身并不包含网络编程的功能,因此开发者需要引入第三方库,如libcurl或Boost.Asio,来处理HTTP请求和响应。 2. **HTTP协议**:理解HTTP请求的基本结构是必要的,包括GET方法用于获取页面...
它通常使用HTML解析库,如JavaScript引擎(如.NET框架中的JsEngine)或者第三方库如HtmlAgilityPack,来解析网页内容。通过识别HTML中的`<img>`标签,网络爬虫可以找到网页上的图片链接。 其次,**URL管理**是确保...
在IT行业中,尤其是在Web开发领域,理解网址的结构和如何从中提取信息至关重要。...通过学习和研究这个项目,开发者可以更好地理解如何在实际项目中解析和利用URL信息,尤其是与第三方服务和产品相关的部分。
通常,这些数据可能嵌套在HTML标签内,可以使用正则表达式、DOM解析(如MSXML或HTML Agility Pack)或第三方库如SuperObject来提取。对于JSON或XML格式的数据,使用相应的解析器会更方便。 4. **处理登录和验证码**...
C#可以通过第三方库如`FreeProxy`来获取和管理代理IP。 最后,考虑到网页抓取的持久化需求,我们可能需要将抓取的数据存储到数据库。C#可以配合Entity Framework等ORM工具轻松操作SQL Server、MySQL等数据库。 总...
Delphi中可以使用Html Agility Pack 或其他第三方库来解析HTML。 4. **链接提取**:在HTML解析过程中,蜘蛛会找到页面内的所有链接,并将它们添加到待抓取的URL队列中,以继续遍历互联网。 5. **去重处理**:为了...
- 在JSP中,你可以使用Java代码来实现HTTP请求,如使用`java.net.URL`和`java.io.BufferedReader`,或者使用第三方库如Apache HttpClient。 - 解析HTML文档时,可以利用`javax.xml.parsers.DocumentBuilderFactory...
可以使用`System.Net.WebUtility.HtmlDecode`进行HTML解码,或者使用第三方库如HtmlAgilityPack来解析DOM结构并提取图片链接。 5. **图片下载与处理**:获取到图片URL后,需要下载图片并可能进行缩略图生成。`...
在本项目中,我们将深入探讨如何使用Python的Scrapy框架来抓取古诗数据,包括唐诗和宋词,最终将这些数据存储为JSON格式。Scrapy是一个强大的、专为爬取网站并提取结构化数据而设计的工具,非常适合进行大规模的数据...
如果图片来自第三方网站,应查看其版权声明,尊重原创者的权益,避免侵犯他人的知识产权。 为了提高效率,还可以结合使用图片去重技术。在大量下载图片后,可能会出现重复图片,可以利用图像识别算法(如哈希值比较...
学习python一周,学着写了一个爬虫,用来抓取360百科的词条,在这个过程中,由于一个小小的改动,程序出现一些问题,又花了几天时间研究,问了各路高手,都没解决,最终还是...第三方的BeautifulSoup(自行下载安装)
获取到验证码图片URL后,可以使用Java的`HttpURLConnection`或第三方库如Apache HttpClient来下载图片。下载的图片可能需要预处理,例如调整大小、灰度化或二值化,以提高OCR识别的准确性。Java的`BufferedImage`类...