我一直在尝试使用Android上的JSOUP解析网站,以便提取存储在HTML中的所有图像。我遇到的问题是,有些网站会要求您明确接受使用Cookie,然后才能进一步浏览。在解析这些网站的HTML时,我只获得要求您接受cookie的窗口的HTML,但由于我是从代码中执行此操作,因此我不知道如何接受cookie或如何解决它。
这甚至可能吗?
例如,网站http://tweakers.net。当我用以下内容解析它时:
try {
//Connect to the website and get the html
Document doc = Jsoup.connect(uri).get();
//Get all elements with img tag ,
Elements img = doc.getElementsByTag("img");
for (Element el : img) {
//for each element get the srs url
String src = el.absUrl("src");
logger.e("image found: " + src);
//getImages(src);
}
} catch (IOException ex) {
System.err.println("There was an error");
logger.e(ex.getMessage());
}
我得到的唯一输出是:
image found: http://tweakimg.net/g/cookies/logo-50x50.png
这是小窗口上的图像,要求您接受使用cookies
所以我的问题是:是否有可能解析真实的网站,即使有这个cookie的东西,我该怎么办? 如果可能的话,我想知道一种适用于每个可能网站的独特方式。因为据我所知,关于cookie处理的大多数帖子都是针对特定网站的,它们包括创建网站要求的cookie,但这将是一个大问题,因为不同的网站以不同的方式实现他们的cookie。
使用案例: 当用户在手机上浏览网页然后点击分享按钮时,此过程开始。意图启动我的应用程序,我得到了待共享网站的网址,我用jsoup解析它。
答案 0 :(得分:2)
有lots of answers here有关如何配置JSoup以将Cookie传递到目标网站,一旦您确定(手动)Cookie应该是什么样子。
Cookie to log in with Jsoup?可能是最简单的
然而,除了最简单的网站互动案例 - 并且鉴于您已经使用Java进行编码 - 您可能会考虑调查Selenium WebDriver。在这种情况下,您将使用真实的浏览器与网站进行交互,而不是具有自己的cookie存储库的HTTP库,这就是JSoup构建在其上的。
答案 1 :(得分:1)
我认为您正在解决仅在保护隐私人隐私的同时创建的问题。您正在连接的网站试图通知某人并尝试征得他们的同意。
另一方面,我认为这些网站并不希望让抓取工具查找和索引其网页。
尝试设置User-Agent
,表示与常见浏览器不同的信号。那可能已经做到了。
如果这不起作用,请尝试模仿某个网络抓取工具,例如Google,BING或者发送与curl相同的标题。