Create intelligent Web spiders -How to use Java network objects and HTML objects

实时翻译系统html5源码 以下展示部分源码,需要完整版的请下载文件 <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> <style> *{margin:0;padding:0;list-style:none} body{background:#ccc;} .wrap{margin:100px auto;width:900px;height:300px;box-shadow:0 0 4px #434343;background:#fff;padding:20px;border-radius:10px;} .wrap .language{position:relative;width:100px;height:30px;padding:0 30px;margin:20px;text-align:center;line-height:30px;border:1px solid #434343;cursor:pointer;} .wrap .language .languages{position:absolute;top:30px;left:-1px;width:354px;height:auto;border:1px solid #434343;display:none;background:#fff;color:#fff;line-height:40px} .wrap .language .languages ul li{float:left;width:78px;height:40px;margin:4px; border:1px dashed #ccc;background:#368;} .wrap .input, .wrap .show{width:430px;height:150px;float:left;background:#fff; color:#000;margin:10px;box-shadow:0 0 4px #222;line-height:40px;font-size:20px;text-indent:10px;color:#333;font-family:'微软雅黑';} .wrap .input textarea{z-index:3;height:100%;width:400px;border:0;resize:none;outline:0;color:#333;font-family:'微软雅黑';margin:0;padding:0;line-height:40px;font-size:20px;text-indent:10px;} .wrap span.btn{width:140px;height:30px;float:right;margin:10px;line-height:30px;text-align:center;background:#368;box-shadow:0 0 4px #ccc;border-radius:5px;color:#fff;cursor:pointer;} </style> 立即下载

摘要

   你是否想过创建自己的符合特定标准的网站数据库呢?网络蜘蛛,有时也称为网络爬虫,是一些根据网络链接从一个网站到另外一个网站,检查内容和记录位置的程序。商业搜索站点使用网络蜘蛛丰富它们的数据库,研究人员可以使用蜘蛛获得相关的信息。创建自己的蜘蛛搜索的内容、主机和网页特征,比如文字密度和内置的多媒体内容。这篇文章将告诉你如何使用Java的HTML和网络类来创建你自己的功能强大的网络蜘蛛。

 

   这篇文章将介绍如何在标准Java网络对象的基础上创建一个智能的网络蜘蛛。蜘蛛的核心是一个基于关键字/短语标准和网页特征进行深入网络搜索的递归程序。搜索过程在图形上类似于JTree结构。我主要介绍的问题,例如处理相关的URL,防止循环引用和监视内存/堆栈使用。另外,我将介绍再访问和分解远程网页中如何正确是用Java网络对象。

 

l         蜘蛛示例程序

示例程序包括用户界面类SpiderControl、网络搜索类Spider,两个用作创建JTree显示结果的类UrlTreeNode和UrlNodeRenderer,和两个帮助验证用户界面中数字输入的类IntegerVerifier和VerifierListener。文章末尾的资源中有完整代码和文档的琏接。

SpiderControl界面由三个属性页组成,一个用来设置搜索参数,另一个显示结果搜索树(JTree),第三个显示错误和状态信息,如图

图2 搜索树

 

       一个Spider类的实例以独立进程的方式执行网络搜索。独立进程的使用是为了SpiderControl模块可以不断更新搜索树显示和处理停止搜索按钮。当Spider运行时,它不断在第二个属性页中为JTree增加节点(UrlTreeNode)。包含关键字和短语的搜索树节点以蓝色显示(UrlNodeRenderer)。

 

当搜索完成以后,用户可以查看站点的统计,还可以用外部浏览器(默认是位于Program Files目录的Internet Explorer)查看站点。统计包括关键字出现次数,总字符数,总图片数和总链接数。

 

l         Spider类

 

Spider类负责搜索给出起点(入口)的网络,一系列的关键字和主机,和搜索深度和大小的限制。Spider继承了Thread,所以可以以独立线程运行。这允许SpiderControl模块不断更新搜索树显示和处理停止搜索按钮。

 

构造方法接受包含对一个空的JTree和一个空的JtextArea引用的搜索参数。JTree被用作创建一个搜索过程中的分类站点记录。这样为用户提供了可见的反馈,帮助跟踪Spdier循环搜索的位置。JtextArea显示错误和过程信息。

 

构造器将参数存放在类变量中,使用UrlNodeRenderer类初始化显示节点的JTree。直到SpiderControl调用run()方法搜索才开始。

 

run()方法以独立的线程开始执行。它首先判断入口站点是否是一个Web引用(以http,ftp或者www开始)或是一个本地文件引用。它接着确认入口站点是否具有正确的符号,重置运行统计,接着调用searchWeb()开始搜索:

 

     public void run()

 

     {

 

       DefaultTreeModel treeModel = (DefaultTreeModel)searchTree.getModel(); // get our model

 

       DefaultMutableTreeNode root = (DefaultMutableTreeNode)treeModel.getRoot();

 

       String urllc = startSite.toLowerCase();

 

       if(!urllc.startsWith("http://") && !urllc.startsWith("ftp://") &&

 

            !urllc.startsWith("www."))

 

         {

 

          startSite = "file:///"+startSite;   // Note you must have 3 slashes !

 

         }

 

         else // Http missing ?

 

          if(urllc.startsWith("www."))

 

          {

 

            startSite = "http://"+startSite; // Tack on http:// 

 

          }

 

        

 

        startSite = startSite.replace('//', '/'); // Fix bad slashes

 

  

 

       sitesFound = 0;

 

       sitesSearched = 0;

 

       updateStats();

 

       searchWeb(root,startSite); // Search the Web

 

       messageArea.append("Done!/n/n");

 

     }

 

searchWeb()是一个接受搜索树父节点和搜索Web地址参数的递归方法。searchWeb()首先检查给出的站点是否已被访问和未被执行的搜索深度和站点。SearchWeb()接着允许SpiderControl运行(更新界面和检查停止搜索按钮是否按下)。如果所有正常,searchWeb()继续,否则返回。

 

在searchWeb()开始读和解析站点以前,它首先检验基于站点创建的URL对象是否具有正确的类型和主机。URL协议被检查来确认它是一个HTML地址或者一个文件地址(不必搜索mailto:和其他协议)。接着检查文件扩展名(如果当前有)来确认它是一个HTML文件(不必解析pdf或者gif文件)。一旦这些工作完成,通过isDomainOk()方法检查根据用户指定的列表检查主机:

 

...URL url = new URL(urlstr); // Create the URL object from a string.

 

 

 

   String protocol = url.getProtocol(); // Ask the URL for its protocol

 

   if(!protocol.equalsIgnoreCase("http") && !protocol.equalsIgnoreCase("file"))

 

   {

 

      messageArea.append("    Skipping : "+urlstr+" not a http site/n/n");

 

      return;

 

   }

 

 

 

   String path = url.getPath();  // Ask the URL for its path

 

   int lastdot = path.lastIndexOf("."); // Check for file extension

 

   if(lastdot > 0)

 

   {

 

      String extension = path.substring(lastdot);  // Just the file extension

 

      if(!extension.equalsIgnoreCase(".html") && !extension.equalsIgnoreCase(".htm"))

 

      return;  // Skip everything but html files

 

   }

 

 

 

   if(!isDomainOk(url))

 

   {

 

      messageArea.append("    Skipping : "+urlstr+" not in domain list/n/n");

 

      return;

 

   }

 

 

 

这里,searchWeb()公平的确定它是否有值得搜索的URL,接着它为搜索树创建一个新节点,添加到树中,打开一个输入流解析文件。下面的章节涉及很多关于解析HTML文件,处理相关URL和控制递归的细节。

 

l         解析HTML文件

 

这里有两个为了查找A HREF来解析HTML文件方法——一个麻烦的方法和一个简单的方法。

 

如果你选择麻烦的方法,你将使用Java的StreamTokenizer类创建你自己的解析规则。使用这些技术,你必须为StreamTokenizer对象指定单词和空格,接着去掉<和>符号来查找标签,属性,在标签之间分割文字。太多的工作要做。

 

简单的方法是使用内置的ParserDelegator类,一个HTMLEditorKit.Parser抽象类的子类。这些类在Java文档中没有完善的文档。使用ParserDelegator有三个步骤:首先为你的URL创建一个InputStreamReader对象,接着创建一个ParserCallback对象的实例,最后创建一个ParserDelegator对象的实例并调用它的public方法parse():

 

   UrlTreeNode newnode = new UrlTreeNode(url); // Create the data node

 

   InputStream in = url.openStream(); // Ask the URL object to create an input stream

 

   InputStreamReader isr = new InputStreamReader(in); // Convert the stream to a reader

 

   DefaultMutableTreeNode treenode = addNode(parentnode, newnode); 

 

   SpiderParserCallback cb = new SpiderParserCallback(treenode); // Create a callback object

 

   ParserDelegator pd = new ParserDelegator(); // Create the delegator

 

   pd.parse(isr,cb,true); // Parse the stream

 

   isr.close();  // Close the stream

 

parse()接受一个InputStreamReader,一个ParseCallback对象实例和一个指定CharSet标签是否忽略的标志。parse()方法接着读和解码HTML文件,每次完成解码一个标签或者HTML元素后调用ParserCallback对象的方法。

 

在示例代码中,我实现了ParserCallback作为Spider的一个内部类,这样就允许ParseCallback访问Spider的方法和属性。基于ParserCallback的类可以覆盖下面的方法:

 

n         handleStartTag():当遇到起始HTML标签时调用,比如>A <

 

n         handleEndTag():当遇到结束HTML标签时调用,比如>/A<

 

n         handleSimpleTag():当遇到没有匹配结束标签时调用

 

n         handleText():当遇到标签之间的文字时调用

 

在示例代码中,我覆盖了handleSimpleTag()以便我的代码可以处理HTML的BASE和IMG标签。BASE标签告诉当处理相关的URL引用时使用什么URL。如果没有BASE标签出现,那么当前URL就用来处理相关的引用。HandleSimpleTag()接受三个参数,一个HTML.Tag对象,一个包含所有标签属性的MutableAttributeSet,和在文件中的相应位置。我的代码检查标签来判断它是否是一个BASE对象实例,如果是则HREF属性被提取出来并保存在页面的数据节点中。这个属性以后在处理链接站点的URL地址中被用到。每次遇到IMG标签,页面图片数就被更新。

 

我覆盖了handleStartTag以便程序可以处理HTML的A和TITLE标签。方法检查t参数是否是一个事实上的A标签,如果是则HREF属性将被提取出来。

 

fixHref()被用作清理大量的引用(改变反斜线为斜线,添加缺少的结束斜线),链接的URL通过使用基础URL和引用创建URL对象来处理。接着递归调用searchWeb()来处理链接。如果方法遇到TITLE标签,它就清除存储最后遇到文字的变量以便标题的结束标记具有正确的值(有时网页的title标签之间没有标题)。

 

我覆盖了handleEndTag()以便HTML的TITLE结束标记可以被处理。这个结束标记指出前面的文字(存在lastText中)是页面的标题文字。这个文字接着存在页面的数据节点中。因为添加标题信息到数据节点中将改变树中数据节点的显示,nodeChanged()方法必须被调用以便树可以更新。

 

我覆盖了handleText()方法以便HTML页面的文字可以根据被搜索的任意关键字或者短语来检查。HandleText()接受一个包含一个子符数组和该字符在文件中位置作为参数。HandleText()首先将字符数组转换成一个String对象,在这个过程中全部转换为大写。接着在搜索列表中的每个关键字/短语根据String对象的indexof()方法来检查。如果indexof()返回一个非负结果,则关键字/短语在页面的文字中显示。如果关键字/短语被显示,匹配被记录在匹配列表的节点中,统计数据被更新:

 

public class SpiderParserCallback extends HTMLEditorKit.ParserCallback {

 

/**

 

  * Inner class used to html handle parser callbacks

 

  */

 

  public class SpiderParserCallback extends HTMLEditorKit.ParserCallback {

 

      /** URL node being parsed */

 

      private UrlTreeNode node;

 

      /** Tree node */

 

      private DefaultMutableTreeNode treenode;

 

      /** Contents of last text element */

 

      private String lastText = "";

 

      /**

 

       * Creates a new instance of SpiderParserCallback

 

       * @param atreenode search tree node that is being parsed

 

       */

 

     public SpiderParserCallback(DefaultMutableTreeNode atreenode) {

 

            treenode = atreenode;

 

            node = (UrlTreeNode)treenode.getUserObject();

 

     }

 

     /**

 

      *  Handle HTML tags that don't have a start and end tag

 

      * @param t HTML tag

 

      * @param a HTML attributes

 

      * @param pos Position within file

 

      */

 

     public void handleSimpleTag(HTML.Tag t,

 

                             MutableAttributeSet a,

 

                             int pos)

 

     {

 

       if(t.equals(HTML.Tag.IMG))

 

       {

 

         node.addImages(1);

 

         return;

 

       }

 

        if(t.equals(HTML.Tag.BASE))

 

       {

 

         Object value = a.getAttribute(HTML.Attribute.HREF);

 

         if(value != null)

 

          node.setBase(fixHref(value.toString()));

 

 

 

       }   

 

        

 

     }

 

     /**

 

      *  Take care of start tags

 

      * @param t HTML tag

 

      * @param a HTML attributes

 

      * @param pos Position within file

 

      */

 

      public void handleStartTag(HTML.Tag t,

 

                             MutableAttributeSet a,

 

                             int pos)

 

     {

 

        if(t.equals(HTML.Tag.TITLE))

 

       {

 

         lastText="";

 

         return;

 

       }

 

       if(t.equals(HTML.Tag.A))

 

       {

 

         Object value = a.getAttribute(HTML.Attribute.HREF);

 

         if(value != null)

 

         {

 

          node.addLinks(1);

 

          String href = value.toString();

 

          href = fixHref(href);

 

          try{

 

            URL referencedURL = new URL(node.getBase(),href);

 

            searchWeb(treenode, referencedURL.getProtocol()+"://"+referencedURL.getHost()+referencedURL.getPath());

 

          }

 

          catch (MalformedURLException e)

 

          {

 

            messageArea.append("    Bad URL encountered : "+href+"/n/n");  

 

            return; 

 

          }

 

         }

 

       }

 

         

 

     }

 

     

 

      /**

 

      *  Take care of start tags

 

      * @param t HTML tag

 

      * @param pos Position within file

 

      */

 

      public void handleEndTag(HTML.Tag t,

 

                                int pos)

 

     {

 

       if(t.equals(HTML.Tag.TITLE) && lastText != null)

 

       {

 

         node.setTitle(lastText.trim());

 

         DefaultTreeModel tm = (DefaultTreeModel)searchTree.getModel();

 

         tm.nodeChanged(treenode);

 

        }

 

         

 

     }

 

      /**

 

       * Take care of text between tags, check against keyword list for matches, if

 

       * match found, set the node match status to true

 

       * @param data Text between tags

 

       * @param pos position of text within Webpage

 

       */

 

      public void handleText(char[] data, int pos)

 

      {

 

        lastText = new String(data);

 

        node.addChars(lastText.length());

 

        String text = lastText.toUpperCase();

 

        for(int i = 0; i < keywordList.length; i++)

 

        {

 

          if(text.indexOf(keywordList[i]) >= 0)

 

          {

 

            if(!node.isMatch())

 

            {

 

             sitesFound++;

 

             updateStats();

 

            }

 

            node.setMatch(keywordList[i]);

 

            return;

 

          }

 

        }

 

      }

 

     

 

  

 

  }

 

 

 

l         处理和补全URL

 

当遇到相关页面的链接,你必须在它们基础URL上创建完整的链接。基础URL可能通过BASE标签在页面中明确的定义,或者暗含在当前页面的链接中。Java的URL对象为你解决这个问题提供了构造器,提供了根据它的链接结构创建相似的。

 

       URL(URL context, String spec)接受spec参数的链接和context参数的基础链接。如果spec是一个相关链接,构建器将使用context来创建一个完整引用的URL对象。URL它推荐URL遵循严格的(Unix)格式。使用反斜线,在Microsoft Windows中,而不是斜线,将是错误的引用。如果spec或者context指向一个目录(包含index.html或default.html),而不是一个HTML文件,它必须有一个结束斜线。fixHref()方法检查这些引用并且修正它们:

 

          public static String fixHref(String href)

 

   {

 

      String newhref = href.replace('//', '/'); // Fix sloppy Web references

 

      int lastdot = newhref.lastIndexOf('.');

 

      int lastslash = newhref.lastIndexOf('/');

 

      if(lastslash > lastdot)

 

      {

 

      if(newhref.charAt(newhref.length()-1) != '/')

 

         newhref = newhref+"/";  // Add missing /

 

      }

 

   

 

      return newhref;    

 

      

 

   }

 

l         控制递归

 

searchWeb()开始是为了搜索用户指定的起始Web地址而被调用的。它接着在遇到HTML链接时调用自身。这形成了深度优先搜索的基础,也带来了两种问题。首先非常危险的内存/堆栈溢出问题将因为太多的递归调用而产生。如果出现环形的引用,这个问题就将发生,也就是说,一个页面链接另外一个链接回来的连接,这是WWW中常见的事情。为了预防这种现象,searchWeb()检查搜索树(通过urlHasBeenVisited()方法)来确定是否引用的页面已经存在。如果已经存在,这个链接将被忽略。如果你选择实现一个没有搜索树的蜘蛛,你仍然必须维护一个以访问站点的列表(在Vector或数组中)以便你可以判断是否你正在重复访问站点。

 

递归的第二个问题来自深度优先的搜索和WWW的结构。根据选择的入口,深度优先的搜索在初始页面的初始链接在完成处理以前造成大量的递归调用。这就造成了两种不需要的结果:首先内存/堆栈溢出可能发生,第二被搜索过的页面可能很久才被从初始入口众多的结果中删除。为了控制这些,我为蜘蛛添加了最大搜索深度设置。用户可以选择可以达到的深度等级(链接到链接到链接),当遇到每个链接时,当前深度通过调用depthLimitExceeded()方法进行检查。如果达到限制,链接就被忽略。测试仅仅检查JTree中节点的级别。

 

示例程序也增加了站点限制,用户来指定,可以在特定数目的URL被检查以后停止搜索,这样确保程序可以最后停止!站点限制通过一个简单的数字计数器sitesSearched来控制,这个数字每次调用searchWeb()后都被更新和检查。

 

l         UrlTreeNode和UrlNodeRenderer

 

UrlTreeNode和UrlNodeRenderer是用来在SpiderControl用户界面中创建JTree中个性化的树节点的类。UrlTreeNode包含每个搜索过的站点钟的URL信息和统计数据。UrlTreeNode以作为用户对象属性的标准DefaultMutableTreeNode对象形式存储在JTree中。数据包括节点中跟踪关键字出现的能力,节点的URL,节点的基础URL,链接的数量,图片的数量和字符的个数,以及节点是否符合搜索规则。

 

UrlTreeNodeRenderer是DefaultTreeCellRenderer界面的实现。UrlTreeNodeRenderer使节点包含匹配关键字显示为蓝色。UrlTreeNodeRenderer也为JtreeNodes加入了个性化的图标。个性化的显示通过覆盖getTreeCellRendererComponent()方法(如下)实现。这个方法在树中创建了一个Component对象。大部分的Component属性通过子类来进行设置,UrlTreeNodeRenderer改变了文字的颜色(前景色)和图标:

 

   public Component getTreeCellRendererComponent(

 

                          JTree tree,

 

                          Object value,

 

                          boolean sel,

 

                          boolean expanded,

 

                          boolean leaf,

 

                          int row,

 

                          boolean hasFocus) {

 

 

 

          super.getTreeCellRendererComponent(

 

                          tree, value, sel,

 

                          expanded, leaf, row,

 

                          hasFocus);

 

         

 

          UrlTreeNode node = (UrlTreeNode)(((DefaultMutableTreeNode)value).getUserObject());

 

          if (node.isMatch()) // Set color

 

              setForeground(Color.blue);

 

           else

 

              setForeground(Color.black);

 

        

 

          if(icon != null)    // Set a custom icon

 

          {

 

              setOpenIcon(icon);

 

              setClosedIcon(icon);

 

              setLeafIcon(icon);

 

          }

 

         

 

 

 

          return this;

 

    }

 

l         总结

 

这篇文章向你展示了如何创建网络蜘蛛和控制它的用户界面。用户界面使用JTree来跟踪蜘蛛的进展和记录访问过的站点。当然,你也可以使用Vector来记录访问过的站点和使用一个简单的计数器来显示进展。其他增强可以包含通过数据库记录关键字和站点的接口,增加通过多个入口搜索的能力,用大量或者很少的文字内容来显现站点,以及为搜索引擎提供同义搜索的能力。

 

这篇文章中展示的Spider类使用递归调用搜索程序,当然,一个新蜘蛛的独立线程可以在遇到每个链接时开始。这样的好处是允许链接远程URL并发执行,提高速度。然而记住那些叫做DefaultMutableTreeNode的JTree对象,不是线程安全的,所以程序员必须自己实现同步。

 

 

 

资源:

 

该文章的源代码和Java文档:

 

http://www.javaworld.com/javaworld/jw-11-2004/spider/jw-1101-spider.zip

Gromacs实战:从蛋白质-小分子对接到分子动力学模拟全流程解析 本文详细解析了使用Gromacs进行蛋白质-小分子对接和分子动力学模拟的全流程,包括文件准备、拓扑生成、复合物构建、溶剂化处理、能量最小化及平衡模拟等关键步骤。通过实战案例,帮助研究者验证药物分子与靶标蛋白的结合稳定性,提升分子动力学模拟的效率和准确性。 阅读详情

相关推荐

WinFrom真入门(1)——Windows窗体应用概念

用Winform开发的桌面程序,是在Windows操作系统上运行的,这个不用多说。窗体(Form)的作用‌:窗体是用户交互的容器,承载按钮、文本框等控件,构成应用程序的界面‌。在Windows操作系统中,窗体(窗口)所处可见,例如: 一个标准的窗体其实就是一块矩形区域,客户区域指的是窗口内部区域。除去标题兰和边框外的区域可视为内部区域,称为客户区域。我们开发人员可以在窗口的客户区域中放置控件,也可以在其中绘制出咱们所需要的图形。WinForm程序的项目的结构,如下图: Main()方法是程序的入口,这几行代

ByteGeek 1633

创建智能网络蜘蛛——如何使用Java网络对象和HTML对象(翻译)

创建智能网络蜘蛛       ——如何使用Java网络对象和HTML对象(翻译)       作者:Mark O. Pendergast原文:http://www.javaworld.com/javaworld/jw-11-2004/jw-1101-spider.html 摘要       你是否想过创建自己的符合特定标准的网站数据库呢?网络蜘蛛,有时也称为网络爬虫,是一些

爪哇米工作室陈跃峰的移动开发博客 5848

博途的HMI(触摸屏)的应用

触摸屏(HMI):用于控制PLC,可认为是小型上位机(用于控制PLC的都可认为是上位机)上位机(PC Station):将触摸屏升级为电脑----工控机(工业控制的机器)用博途编写西门子的触摸屏和上位机。

王阿妹小天才的博客 2676

Velocity引擎翻译HTML模板的两种写法

第一种写法新建一个HTML文件,内容为: Hello Velocity Welcome $name to Javayou.com! today is $date. 然后通过Java代码读取HTML文件,并解析参数,输出结果 第二种写法,使用场景多为HTML页面内容存在数据库,通过SQL获取后为String格式,然后解析 Java代码如下: import java.io

sdmjhca的专栏 1698

BCIC IV 2a数据集:从下载到实战应用全解析

本文全面解析了BCI Competition IV 2a(BCIC IV 2a)数据集的应用流程。从官方渠道下载数据、解析其结构,到在MATLAB和Python环境中进行数据导入、预处理(包括处理特殊受试者A04T),并详细演示了从特征提取(如CSP)到分类(如LDA、SVM)的完整实战步骤,为脑机接口研究者提供了从入门到实践的清晰指南。

weixin_28235513的博客 974

解密CANoe数据回放:从BLF到ASC的格式转换与优化策略

本文深入解析CANoe数据回放中BLF与ASC格式的转换与优化策略,帮助工程师高效处理汽车电子测试数据。详细介绍了两种格式的特性、转换方法及性能优化技巧,包括CANoe内置功能、命令行自动化和第三方工具应用,提升故障诊断和系统验证效率。

weixin_28331555的博客 536

用Java做一个及时翻译工具

平时看英文文档或者查询资料的时候,遇到了不懂的单词,就要去百度,然后就会很麻烦。于是就想到用Java写一个及时翻译的小工具!预期的实现效果: 双击选中一个单词,按下Ctrl+C进行复制 然后马上显示出对应单词的中文翻译首先基本思路是这样的: 首先获取系统剪切板的内容 将该内容发送到网页上,然后获取网页的源码,查找到对应的中文解释 将中文翻译显示出来 以上就是基本的思路!但

未思 3万+

遥感目标检测数据集汇总

文章目录1. 光学数据集1.1 DIOR1.2 LEVIR1.3 DOTA1.4 RSOD1.5 NWPU VHR-101.6 VEDAI1.7 COWC1.8 ITCVD1.9 DIUx xView 20181.10 HRSC20161.11 TAS1.12 SZTAKI‐INRIA1.13 UCAS AOD1.14 DLR 3K Vehicle2. SAR2.1 SSDD2.2 SSDD+2....

quanwei的博客 6万+

网络蜘蛛应用

文章目录IP限制反爬虫机制Headers反爬虫机制UA反爬虫机制 说起网络上这个网络蜘蛛最让程序员头疼的就是反爬机制,爬虫其实就是模拟浏览器获取数据,反爬虫机制就是过滤这些不正常的访问及数据获取,对于一些古老的应用没有反爬虫机制这样一来程序员爬虫就是海阔任鱼跃,但是对于一些应用广泛的应用会更新加上一些反爬虫机制,那么接下来让我们了解一下常见的反爬虫机制及应对策略。 IP限制反爬虫机制 有一些网站会...

asnowdream的博客 426

TCP/IP工业通信C#极致实现:工业级TcpClient封装 + 粘包拆包彻底解决 + 高频采集专项优化(完整可投产)

在工业自动化、PLC通信、工业传感器/模块、产线高频数据采集等场景中,TCP/IP是绝对主流的通信方式,相比串口/485,具备传输速率高、距离无限制、布线简单、抗干扰强的优势。但工业TCP通信和普通桌面TCP通信有本质区别,工业场景的核心要求是:✔高可靠:7×24小时不间断运行,断网自动重连、异常自动恢复,绝不崩溃;✔无数据错误:彻底解决「粘包、拆包、半包」问题(工业通信第一大坑,90%的通信异常源于此);✔高频采集优化:支持级别的高频读写PLC/设备,无卡顿、无丢帧、CPU占用极低;✔。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 859

lammps不同晶面建模方法汇总

Lammps lattice命令中的orient关键词可实现晶体的旋转和重定向,下面的命令中,111面的法线方向与y正方向重合,说明111面垂直于y轴。在有些模拟中,需要研究特定面的性质,比如研究110面,默认状态下,110面不是坐标平面,研究起来不方便,需要对模型进行旋转,如下图所示。经过旋转后,110面的法线方向与x轴正方向重合,旋转之后再重新对晶体进行切割,新模型的x面就是110面。需要注意的是,这种方法需要明确指定x、y、z轴的正方向分别对应哪三个面的法线方向,缺一不可。大家好,我是小马老师。

lammps_jiayou的博客 356

JAVA翻译HTML网页内容

1、需要添加以下jar包 httpclient-4.4.1.jar json-lib-2.4-jdk15.jar jsoup-1.11.3.jar 2、jar包下载地址 http://maven.aliyun.com/mvn/search 3、百度翻译开发平台 http://api.fanyi.baidu.com/api/trans/product/index 4、代码如下 具体思路...

遛羊的懒懒 1846

【STM32实物】基于STM32的扫地机器人/小车控制系统设计

扫地机器人系统采用分层结构设计,主要包括底层硬件控制层、中间数据处理层和上层用户交互层。底层硬件控制层负责对各个硬件模块进行控制和数据采集,中间数据处理层负责对采集到的数据进行处理和解算,上层用户交互层负责与用户进行交互并显示系统状态信息。

嵌入式阿齐Archie 1万+

Java去掉html标签的各种姿势

一、背景 业务开发中可能需要将html的标签全部去掉,本文将多种方法综合在这里,供大家参考。 二、方法 2.1 纯正则方法 import java.util.regex.Matcher; import java.util.regex.Pattern; public class HTMLSpirit{ public static String delHTMLTag(S...

悟鸣的技术博客 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

html 解析器 java,java JDK自带的HTML解析器 (HTMLEditorKit.Parser) 示例

HtmlParseDemo.javaimport java.io.*;import java.net.*;import javax.swing.text.*;import javax.swing.text.html.*;import javax.swing.text.html.parser.*;/*** This small demo program shows how to use the* H...

weixin_32452829的博客 432

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

如何在Java中转义HTML

在Java中,我们可以使用Apache commons-text , StringEscapeUtils.escapeHtml4(str)来转义HTML字符。 pom.xml <dependency> <groupId>org.apache.commons</groupId> <artifactId>common...

一名可爱的技术搬运工 2589

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

java解析html_Java解析Html

最近用到了Java解析Html的一个库Jsoup, 这儿是官网, 在此分享给大家,有这方面需要的朋友可以试一试。有三个类需要我们了解,分别是Document,Elements,Element大至用法有两步第一步:加载html,,这儿提供两种方式,一种是从本地加载,一种是从网上直接加载。从本地加载:String html = "YOU HTML STRING";Document doc = Jsou...

weixin_42336958的博客 1万+

GPT Image 2 出的 UI 图如何转成 HTML 和可编辑 Figma

AI 生成的 UI 图,本身只是起点。用 Codex 或 Claude Code 把它变成 HTML,就有了能演示的页面;用 html.to.design 把 HTML 导回 Figma,就有了能沉淀的设计源文件;用 Codia 直接把图转成 Figma,则适合只要设计稿、追求速度的场景。三条链路互相补充,组合起来就形成了"图、代码、设计稿"之间的闭环。同时也要清楚它的边界:单张位图缺少精确数值,像素级还原目前还做不到稳定;图里的文字和图标需要人工把关。

JEECG官方博客 222

开源项目推荐:2027 高考志愿填报指北|开源单页 HTML 高报资料工具书

高考志愿填报信息量大、维度多,考生与家长往往面临资料零散、信息不对称、优质内容收费门槛高等问题。《2027 高考志愿填报指北》是雪人老师开源的高报笔记资料汇编,将 683 篇、280.5 万字的原创笔记整合为单页 HTML 电子书,覆盖专业、院校、城市、填报攻略四大板块。支持左侧折叠导航、快速跳转、浏览器原生 A4 打印,可在线阅读也可本地保存使用,采用 CC BY-NC 4.0 协议开源,非商业场景可自由传播改编,是高考志愿填报阶段实用的免费参考工具书。关键词:高考志愿填报;高报资料;开源电子书;

Admans的专栏 296

纯静态HTML项目文件打包成war包

纯静态HTML项目文件打包成war包

bjzhang75的博客 212

热榜上手|HyperFrames:写HTML出MP4

HeyGen 开源的 TypeScript 视频框架:把 HTML、CSS 动画直接渲染成确定性 MP4,专为 AI agent 批量出片设计,单周涨 5633 star。

mihuyang的博客 260

HTML 转 Word API:HTML 与 URL 输入、DOCX 输出和版式核对

HTML 转 Word API 可把 HTML 正文或公开网页转为可编辑的 DOCX。请求用 type 指定输入类型,用 content 传正文或地址。可选择公开链接或归属当前应用的私有文件引用。

DevOpenClub 专栏 246

前端三剑客与 HTML 核心标签

前端是项目的门面。这篇文章把 HTML 的骨架作用、常用标签的专属属性、iframe 嵌套、锚点定位、表格与表单逐项拆开,最后落到「一个标签的属性能干什么」这个最实际的问题上。

2401_89953644的博客 249
上一篇: Java Socket注意事项
下一篇: 史玉柱给玩家发工资 一天花掉1063万
Fingter
博客等级 码龄23年 4粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值