java爬虫抓取动态网页(刚来老板(导师)公司实习,接到爬虫和Jsoup方法)

优采云 发布时间: 2022-02-09 20:01

  java爬虫抓取动态网页(刚来老板(导师)公司实习,接到爬虫和Jsoup方法)

  我刚来老板(导师)公司实习。接到了用java做爬虫的任务,在中关村搜索手机参数。功能是输入一个关键字,然后输出相关手机的CPU型号、操作系统、蓝牙版本。例如:输入s6,需要输出s6手机的相关参数。

  好吧,我对Java语言了解不多,可以借此机会好好学习一下,仅此而已!让我们开始学习...

  首先,您需要弄清楚需求是什么。先模拟这个过程,然后你就不会上图了。编造你自己的大脑。首先在百度主页输入关键字s6,然后需要有页面跳转到搜索结果,然后找到相关结果。手机的链接,然后跳转到相关手机的页面,然后需要跳转到参数的页面,然后将相关数据一一提取。

  网上找了很多教程,但是好像没有页面跳转的学习方法。那我想说大家应该对html有一定的了解,如果没有,可以去w3c看看。我尝试使用 RULConnection 和 Jsoup 方法,但似乎都不适用。也许它不适用于这个网站。在中关村搜索的页面好像不能直接跳转。经过多次尝试和失败,终于找到了HTMLUnitDriver类库。这个类库很好用,网上也有对应的jar包。可以自己下载,也可以自己深入学习。让我们从编码开始。

  首先,要在网页上模拟关键词的输入,首先要找到输入框,打开评论元素(每个浏览器的名称不同),找到输入框的位置。

  

  输入框的id是kw,然后百度点击按钮的id是su,那么我们可以模拟在输入框中输入关键词,然后点击百度点击按钮进行搜索。代码显示如下:

   WebDriver driver = new HtmlUnitDriver();

String url = "https://www.baidu.com/";

driver.get(url);

driver.findElement(By.id("kw")).sendKeys(keyword);

driver.findElement(By.id("su")).click();

  这里的关键字是自己输入的参数。代码没有写完整。搜索到的页面应如下所示:

  

  接下来,您应该输入中关村在线的链接。在这里您可以找到链接并通过链接文本输入。代码如下:

  WebElement href =driver.findElement(By.partialLinkText("中关村在线"));

String href_s = href.getAttribute("href");

driver.get(href_s);

  partialLinkText() 函数用于匹配部分链接文本。这里司机已经到了中关村页面。图片如下:

  

  然后需要点击参数表,可以再次查看元素,找到参数的链接地址,如图:

  

  继续跳转到找到的链接页面,代码如下:

  String href_can =driver.findElement(By.partialLinkText("参数")).getAttribute("href");

driver.get(href_can);

  跳转到目标页面后,就该开始提取目标数据了。还是要看网页的源码,图片如下:

  

  可以看到参数数据放在了id叫newTb的div中,所以我们需要找到这个div元素。然后找具体资料,以操作系统为例,先看下操作系统的相关源码,图片如下:

  

  在源码中可以看到,参数中的每一行数据都放在一个li中。可恶的是,这个li没有id值,也没有class值。这可能是网站的反爬虫设计,然后下面的span有一个id值,但是获取不到这个值。百度说这个id是动态的,无法获取固定值。我该怎么办?我想了一个办法,先把这些 li 搞定。,然后找出每个li下的span中是否有操作系统相关的关键字可以匹配。如果是,则输出 li 中的所有文本。代码如下:

  WebElement tb = driver.findElement(By.id("newTb"));

List list = tb.findElements(By.tagName("li"));

for(WebElement e : list) {

if(e.getText() == "") {

}else {

List spans = e.findElements(By.tagName("span"));

boolean tag = false;

for(WebElement span : spans) {

String str = span.getText();

Pattern pattern = Pattern.compile("([Ii][Oo][Ss][ ][0-9]+)|([A][n][d][r][o][i][d][ ][0-9]+)|([C][P][U])|([W][L][A][N])");

Matcher matcher = pattern.matcher(str);

if(matcher.find()) {

tag = true;break;

}

}

if(tag) {

for(WebElement span : spans) {

System.out.println(span.getText());

}

}

}

  上面的代码中使用了简单的正则表达式。不懂童鞋的可以自己学,以后会很有用。最后别忘了拦住司机。代码是:

  driver.quit();

  爬升参数的数据到这里基本就完成了。代码的核心部分都写了,也有一些没写,比如输入或者异常处理。这个学习者自学,然后可以看到我的代码中基本没有注释。事实上,有。我已经全部删除了。我只是希望您可以自己检查和了解更多信息。我自己只是一个学习者。我希望这篇文章 文章 可以对你有所帮助。.

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线