java如何修改以解析谷歌新闻搜索文章标题、预览和URL?
我想解析谷歌新闻搜索:1)文章名称2)预览3)URL
为了实现这一点,我应该对web结构进行修改
Elements links = Jsoup.connect(google + URLEncoder.encode(search , charset) + news).userAgent(userAgent).get().select( ".g>.r>.a");
主要是:
( ".g>.r>.a")
如何修改它
完整代码:
public static void main(String[] args) throws UnsupportedEncodingException, IOException {
String google = "http://www.google.com/search?q=";
String search = "stackoverflow";
String charset = "UTF-8";
String news="&tbm=nws";
String userAgent = "ExampleBot 1.0 (+http://example.com/bot)"; // Change this to your company's name and bot homepage!
Elements links = Jsoup.connect(google + URLEncoder.encode(search , charset) + news).userAgent(userAgent).get().select( ".g>.r>.a");
for (Element link : links) {
String title = link.text();
String url = link.absUrl("href"); // Google returns URLs in format "http://www.google.com/url?q=<url>&sa=U&ei=<someKey>".
url = URLDecoder.decode(url.substring(url.indexOf('=') + 1, url.indexOf('&')), "UTF-8");
if (!url.startsWith("http")) {
continue; // Ads/news/etc.
}
System.out.println("Title: " + title);
System.out.println("URL: " + url);
}
}
# 1 楼答案
如何选择正确的元素(使用chrome)
第一步:在浏览器中禁用javascript(例如,为了方便起见,使用像uMatrix这样的附加组件),以便看到与jsoup相同的结果
现在,右键单击一个元素,然后选择inspect或使用Ctrl+Shift+I打开开发工具。当您将鼠标悬停在Elements选项卡中的源代码上时,您会在呈现的页面中看到相关的元素。右键单击源代码中的n元素可提供复制->;复制选择器。这是一个很好的起点,但有时过于严格。在这里,它给出了选择器
#rso > div:nth-child(3)
,因此id为rso的元素中的第三个直接子div。这太具体了,所以我们概括一下:我们为id为rso
#rso > div
的元素选择所有直接子div然后我们抓取标题锚
h3 > a
、文本节点和属性href
结果的标题和url接下来,我们用类st(
div.st
)获取内部div,该类在其textnode中包含预览。如果缺少该div,我们将跳过该元素在请求中使用
.data("key","value")
,我们不需要手动编码示例代码
输出