天道酬勤,学无止境

使用 Java 在网页上查找链接(Finding Links on a Webpage with Java)

问题

使用 Java 将网页的源代码存储在字符串中。 我想提取源代码中的所有网址并输出它们。 我对正则表达式之类的东西很糟糕,甚至不知道如何解决这个问题。 任何帮助将不胜感激。

回答1

不要使用正则表达式。 使用像 JSoup 这样的解析器。

String html = "your html string";
Document document = Jsoup.parse(html); // Can also take an URL.
for (Element element : document.getElementsByTag("a")) {
    System.out.println(element.attr("href"));
}
回答2

您可以使用 HtmlUnit,然后提取链接就像这样简单:

WebClient wc = new WebClient();
URL url = new URL("http://www.oogly.co.uk/");
HtmlPage page = (HtmlPage) wc.getPage(url);
PrintWriter printWriter = new PrintWriter(new FileWriter(FILE_NAME));
List anchors = page.getAnchors();

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何在Selenium WebDriver中单击网页中的所有链接(How to click on All links in web page in Selenium WebDriver)
    问题 我有10个不同的页面包含不同的链接。 如何点击所有链接? 条件是:i)我不知道有多少链接ii)我要计算并单击每个链接 请给我建议Selenium WebDriver脚本。 回答1 捕获并浏览网页上的所有链接 迭代器和高级for循环可以完成类似的工作; 但是,可以使用数组概念解决循环内页面导航上的不一致。 private static String[] links = null; private static int linksCount = 0; driver.get("www.xyz.com"); List<WebElement> linksize = driver.findElements(By.tagName("a")); linksCount = linksize.size(); System.out.println("Total no of links Available: "+linksCount); links= new String[linksCount]; System.out.println("List of links Available: "); // print all the links from webpage for(int i=0;i<linksCount;i++) { links[i] = linksize.get(i)
  • Shell:连接到网站并访问字段(Shell: Connecting to a website and accessing a field)
    问题 我想编写一个脚本,该脚本接受一个文本参数,打开到特定网站的连接,并使用该字段的ID将arg输入到文本字段中。 这可能吗? 我该怎么做? 我是一个总的壳菜鸟 编辑: 确切的流量: - start script with string - input string into text field on web page - click form button - wait for processing - click hyperlink 回答1 如果您确切地知道需要填写哪个字段,则可以使用lynx完成。 假设您以脚本作为输入参数获取字符串S 然后创建一个命令脚本,该脚本将指导lynx的行为。 例如,假设S=foo ,并且您的字段是网页中的第二个字段。 之后,还有两个字段,然后是“提交”按钮。 之后,您等待页面加载并单击超链接(此后退出)。 该网页是www.something.com。 该命令脚本将在文件bar.txt中: key <tab> //get to first field key <tab> //get to second field key f //input f key o //input o key o //input o key <tab> //get to third field key <tab> //get to fourth field key <tab
  • 如何使用Python脚本下载完整的网页?(How to download a full webpage with a Python script?)
    问题 目前,我有一个只能下载给定页面的HTML的脚本。 现在,我想下载网页上的所有文件,包括HTML , CSS , JS和图像文件(与我们从任何网站的ctrl-s获得的文件相同)。 我当前的代码是: import urllib url = "https://en.wikipedia.org/wiki/Python_%28programming_language%29" urllib.urlretrieve(url, "t3.html") 我访问了很多问题,但他们都只下载了HTML 。 回答1 以下实现使您能够获取HTML子网站。 为了获得您需要的其他文件,可以对其进行更完善的开发。 我为您设置了depth变量,以设置您要解析的最大sub_websites。 import urllib2 from BeautifulSoup import * from urlparse import urljoin def crawl(pages, depth=None): indexed_url = [] # a list for the main and sub-HTML websites in the main website for i in range(depth): for page in pages: if page not in indexed_url: indexed_url
  • 如何从Java通用网页中获取Favicon的URL? [关闭](How to get favicon's URL from a generic webpage in Javascript? [closed])
    问题 在这里很难说出要问什么。 这个问题是模棱两可,含糊,不完整,过于宽泛或修辞性的,不能以当前的形式合理地回答。 如需帮助澄清此问题以便可以重新打开,请访问帮助中心。 7年前关闭。 考虑到收藏夹图标并不总是位于基本URL上,我需要一种从通用网页获取收藏夹图标URL的方法。 Ps,不使用外部服务或库。 回答1 这似乎可行: var getFavicon = function(){ var favicon = undefined; var nodeList = document.getElementsByTagName("link"); for (var i = 0; i < nodeList.length; i++) { if((nodeList[i].getAttribute("rel") == "icon")||(nodeList[i].getAttribute("rel") == "shortcut icon")) { favicon = nodeList[i].getAttribute("href"); } } return favicon; } alert(getFavicon());​ 或查看http://jsfiddle.net/PBpgY/3/以获得在线示例。 回答2 对于仍然无法使用上述代码获得图标的人们; 大多数浏览器支持通过自己(而不是在html中)发送请求(
  • 当您将鼠标悬停在网页上的链接上时,如何隐藏浏览器状态栏上的链接?(How to hide links on browser's statusbar when you mouseover on links on webpage?)
    问题 我在我的项目中使用Zend,PHP,AJAX,JQuery。 问题是,当我将鼠标悬停在网页上的链接上时,如何强制在浏览器的状态栏上不显示链接。 最好的例子是在此站点上,当您将鼠标悬停在此站点上的向上投票链接上时,它不会显示该链接,并且单击增加的投票后无需刷新页面。 谢谢 回答1 在Stack Overflow上,您看不到地址,因为它不是链接(即它不是锚)。 它是一个跨度,图像或其他元素,带有onclick事件处理程序。 这是保证所有浏览器中都不显示状态栏文本的唯一方法,这是设置window.status =“”;的老式JavaScript方法。 这些天对大多数浏览器都无效。 因此,例如... [Html] <img id="clickme" src="myimage.png" alt="My Image" title="Vote"> [JavaScript (jQuery)] $("#clickme").click(function() { alert("You clicked me"); }); 回答2 较旧的浏览器具有诸如window.status = ""; 您可以在其中将消息发送到状态栏,并同样有效地隐藏普通消息。 大多数浏览器不再支持此功能。 因此,如果您使用带有href属性的超链接(或更具体地说,是锚元素<a> ,状态栏将无处可寻。 如果您查看HTML for
  • 使用 R 从网页中提取链接(Extract Links from Webpage using R)
    问题 下面的两篇文章是从网站中提取数据并将其解析为 R 的不同方法的很好的例子。 使用 XML 包将 html 表抓取到 R 数据框 我如何使用 R(Rcurl/XML 包?!)来抓取这个网页 我对编程很陌生,刚开始接触 R,所以我希望这个问题很基本,但鉴于上面的那些帖子,我想是的。 我要做的就是提取与给定模式匹配的链接。 我觉得我可能可以使用 RCurl 读取网页并使用字符串表达式提取它们的蛮力方法。 也就是说,如果网页格式相当好,我将如何使用 XML 包来这样做。 随着我了解更多,我喜欢在解决问题时“查看”数据。 问题是其中一些方法会生成列表列表等,因此新人(如我)很难走过我需要去的地方。 同样,我对所有编程都非常陌生,因此将不胜感激任何帮助或代码片段。 回答1 htmlTreeParse的文档显示了一种方法。 这是另一个: > url <- "http://stackoverflow.com/questions/3746256/extract-links-from-webpage-using-r" > doc <- htmlParse(url) > links <- xpathSApply(doc, "//a/@href") > free(doc) (您可以通过“as.vector”传递“links”来从返回的链接中删除“href”属性。) 我之前的回复: 一种方法是使用
  • Jsoup+HttpClient爬取网页指定内容
    最近学习了Jsoup,做一些必要的笔记,一来是对自己学习的知识的巩固,二来对有同样问题的人有参考作用 文章目录 一 Jsoup简介二 Jsoup主要功能三 获取元素常用方法四 爬取网页内容举例五 总结 一 Jsoup简介 jsoup是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 二 Jsoup主要功能 从一个URL,文件或字符串中解析HTML;使用DOM或CSS选择器来查找、取出数据;可操作HTML元素、属性、文本; 注意:jsoup是基于MIT协议发布的,可放心使用于商业项目。 三 获取元素常用方法 Document doc = Jsoup.parse(content); // 解析网页 得到文档对象 doc.getElementsByTag("title"); // 获取tag是title的所有DOM元素 doc.getElementById("nav_top"); // 获取id=nav_top的DOM元素 doc.getElementsByClass("card"); // 根据样式名称来查询DOM元素 doc.getElementsByAttribute("width"); // 根据属性名来查询DOM元素 doc
  • 从网页获取链接/ URL-Excel VBA(Getting Links/URL from a webpage-Excel VBA)
    问题 我想编写一个宏,它将使用网页中的搜索结果链接。 我这样写 Sub webpage() Dim internet As InternetExplorer Dim internetdata As HTMLDocument Dim internetlink As Object Dim internetinnerlink As Object Set internet = CreateObject("InternetExplorer.Application") internet.Visible = True internet.Navigate ("URL") Do While internet.Busy DoEvents Loop Do Until internet.ReadyState = READYSTATE_COMPLETE DoEvents Loop Set internetdata = internet.Document Set internetlink = internetdata.getElementsByTagName("a") i = 1 For Each internetinnerlink In internetlink ActiveSheet.Cells(i, 2) = internetinnerlink.href i = i + 1 Next
  • 在python中自动与网页交互[关闭](Automate interaction with a webpage in python [closed])
    问题 关闭。 此问题不符合 Stack Overflow 准则。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其成为 Stack Overflow 的主题。 5年前关闭。 改进这个问题 我想自动化与网页的交互。 我一直在使用 pycurl 直到现在,但最终网页将使用 javascript,所以我正在寻找替代品。 典型的交互是“打开页面,搜索一些文本,单击链接(打开表单),填写表单并提交”。 我们将部署在 Google App 引擎上,如果这有所作为的话。 说明:我们正在 appengine 上部署网页。 但是交互是在单独的机器上运行的。 所以硒似乎是最好的选择。 回答1 硒呢? (http://seleniumhq.org) 回答2 Twill 和 mechanize 不做 Javascript,Qt 和 Selenium 不能在 App Engine 上运行((1)),App Engine 只支持纯 Python 代码。 我不知道任何纯 Python Javascript 解释器,这是您在 App Engine 上部署支持 JS 的刮刀所需要的:-(。 也许 Java 中有一些东西,至少可以让您在 App Engine(的 Java 版本)上进行部署? Java 和 Python 中的 App Engine 应用程序版本可以使用相同的数据存储区
  • pageranking算法如何处理没有出站链接的网页?(How does pageranking algorithm deal with webpage without outbound links?)
    问题 我正在学习 PageRanking 算法,对于一些新手问题很抱歉。 我知道每个页面的 PR 值是通过对自身的传入链接求和来计算的。 现在,我对维基百科上“PageRank 值总和为 1”的声明感到困扰。 如维基百科所示的例子,如果每个页面都有一个出站链接,那么每个页面的整体概率的总和应该是一个。 但是,如果页面没有任何出站链接,例如示例中的页面 A,那么总和不应该是值 1 对吗? 因此,Pagerank 算法是否必须假设每个页面都至少有一个出站链接? 有人可以详细说明 Pageranking 如何处理没有任何传入或传出链接的页面吗? 公式将如何相应改变? 谢谢 回答1 由于页面排名在原始文章和维基百科文章中有所描述,当out-degree(v)=0对于某些v确实没有定义,因为您得到P(v,u)=d/n+(1-d)*0/0 - 未定义 没有出边的节点称为悬空节点,基本上有 3 种常用方法来处理它们: 从图中消除这些节点(并迭代地重复该过程,直到没有悬空节点为止。 考虑将这些页面链接回链接到它们的页面(即 - 对于每个边缘(u,v) ,如果out-degree(v) = 0 ,则将(v,u)视为边缘)。 将悬空节点链接到所有页面(通常包括它自己),并有效地使从该节点随机跳转的概率为 1。 关于没有传入节点的页面 - 这应该不是问题,因为一切都是完美定义的。
  • 如何查找网站上的所有链接/页面(How to find all links / pages on a website)
    问题 是否可以在任何给定的网站上找到所有页面和链接? 我想输入URL并生成该站点所有链接的目录树吗? 我看过HTTrack,但是下载了整个网站,我只需要目录树。 回答1 检出linkchecker-它将对网站进行爬网(同时遵循robots.txt )并生成报告。 从那里,您可以编写脚本来创建目录树的解决方案。 回答2 如果浏览器中具有开发者控制台(JavaScript),则可以在以下位置键入此代码: urls = document.querySelectorAll('a'); for (url in urls) console.log(urls[url].href); 缩短: n=$$('a');for(u in n)console.log(n[u].href) 回答3 另一种选择可能是 Array.from(document.querySelectorAll("a")).map(x => x.href) 随着您的$$(甚至更短 Array.from($$("a")).map(x => x.href) 回答4 如果这是一个编程问题,那么我建议您编写自己的正则表达式来解析所有检索到的内容。 目标标记是IMG和A,用于标准HTML。 对于JAVA, final String openingTags = "(<a [^>]*href=['\"]?|<img[^> ]* src=['\"]
  • 如何在本地网页上(在我的PC上)而不是在线某个地方使用Selenium WebDriver?(How to use Selenium WebDriver on local webpage (on my PC) instead of one located somewhere online?)
    问题 我想在硬盘上的网页上使用Selenium WebDriver。 我试图做类似的事情: selenium = new WebDriverBackedSelenium(driver, "C:\\...dispatcher.html"); ...而不是正常的: selenium = new WebDriverBackedSelenium(driver, "http://www.dunnowhattodo.org"); ...但是它不起作用(出现错误“未知协议:c”)。 回答1 尝试使用此方法: webdriver.get("file:///D:/folder/abcd.html"); (或者) selenium = new WebDriverBackedSelenium(driver, "file:///D:/folder/abcd.html"); 回答2 这也可以通过相对文件来完成: Path sampleFile = Paths.get("sample.html"); driver.get(sampleFile.toUri().toString()); 回答3 当您调用driver.get(URL)方法时,WebDriver会使用基本javascript来查找HTTP请求,因此,将网站作为路径引用,将无法完成该任务。 但是,如果您这样做,则有可能:1st
  • 保存完整的网页(Save full webpage)
    问题 在一个项目中工作时,我遇到了一个问题。 我想“抓取”某些感兴趣的网站,并将它们保存为包括样式和图像的“完整网页”,以便为它们建立镜像。 我几次想在网站上加上书签以便以后阅读,几天后该网站被关闭了,因为它被黑了,而且所有者没有数据库的备份。 当然,我可以使用fopen("http://website.com", "r")或fsockopen()很容易地用php读取文件,但是主要目标是保存完整的网页,以防万一它掉了下来,它仍然可以像“编程时光机”一样供其他人使用:) 有没有一种方法可以在不读取和保存页面上每个链接的情况下完成此操作? 也欢迎使用Objective-C解决方案,因为我也想尝试更多解决方案。 谢谢! 回答1 您实际上需要解析所引用的html和所有css文件,这并不容易。 但是,一种快速的方法是使用诸如wget之类的外部工具。 安装wget之后,您可以从命令行运行wget --no-parent --timestamping --convert-links --page-requisites --no-directories --no-host-directories -erobots=off http://example.com/mypage.html 这将下载mypage.html和所有链接的CSS文件,图像以及在CSS内部链接的那些图像。 在系统上安装wget之后
  • 如何使用R(Rcurl / XML包?!)来抓取此网页?(How can I use R (Rcurl/XML packages ?!) to scrape this webpage?)
    问题 我有一个(有些复杂的)网络抓取挑战,我希望完成,并希望为您提供一些指导(达到您想要共享的任何水平): 我想浏览一下此链接中显示的所有“物种页面”: http://gtrnadb.ucsc.edu/ 因此,对于每个人,我将去: 物种页面链接(例如:http://gtrnadb.ucsc.edu/Aero_pern/) 然后到“二级结构”页面链接(例如:http://gtrnadb.ucsc.edu/Aero_pern/Aero_pern-structs.html) 在该链接内,我希望将页面中的数据剪贴起来,这样我将得到一长串包含该数据的列表(例如): chr.trna3 (1-77) Length: 77 bp Type: Ala Anticodon: CGC at 35-37 (35-37) Score: 93.45 Seq: GGGCCGGTAGCTCAGCCtGGAAGAGCGCCGCCCTCGCACGGCGGAGGcCCCGGGTTCAAATCCCGGCCGGTCCACCA Str: >>>>>>>..>>>>.........<<<<.>>>>>.......<<<<<.....>>>>>.......<<<<<<<<<<<<.... 每行将有其自己的列表(在每个动物列表内每个“ trna”的列表内) 我记得遇到过Rcurl和XML(在R中)软件包
  • Finding Links on a Webpage with Java
    Using Java have the source code of a webpage stored in a string. I want to extract all the urls in the source code and output them. I am awful with regex and the like and have no idea how to even approach this. Any help would be greatly appreciated.
  • 使用 Python 从网页中提取图片链接(Extract image links from the webpage using Python)
    问题 所以我想得到这个页面上的所有照片(nba 球队的)。 http://www.cbssports.com/nba/draft/mock-draft 但是,我的代码提供的远不止这些。 它给了我, <a href="/nba/teams/page/ORL"><img src="http://sports.cbsimg.net/images/nba/logos/30x30/ORL.png" alt="Orlando Magic" width="30" height="30" border="0" /></a> 我怎样才能缩短它只给我, http://sports.cbsimg.net/images/nba/logos/30x30/ORL.png. 我的代码: import urllib2 from BeautifulSoup import BeautifulSoup # or if your're using BeautifulSoup4: # from bs4 import BeautifulSoup soup = BeautifulSoup(urllib2.urlopen('http://www.cbssports.com/nba/draft/mock-draft').read()) rows = soup.findAll("table", attrs = {'class':
  • 使用Java抓取网页数据(Webpage data scraping using Java)
    问题 我现在正在尝试使用 Java 实现一个简单的 HTML 网页抓取工具。现在我遇到了一个小问题。 假设我有以下 HTML 片段。 <div id="sr-h-left" class="sr-comp"> <a class="link-gray-underline" id="compare_header" rel="nofollow" href="javascript:i18nCompareProd('/serv/main/buyer/ProductCompare.jsp?nxtg=41980a1c051f-0942A6ADCF43B802');"> <span style="cursor: pointer;" class="sr-h-o">Compare</span> </a> </div> <div id="sr-h-right" class="sr-summary"> <div id="sr-num-results"> <div class="sr-h-o-r">Showing 1 - 30 of 1,439 matches, 我感兴趣的数据是底部显示的整数 1.439。我只是想知道如何从 HTML 中获取该整数。 我现在正在考虑使用正则表达式,然后使用 java.util.Pattern 来帮助获取数据,但仍然不是很清楚过程。
  • 从网页中提取链接(Extract links from a web page)
    问题 使用Java,如何从给定的网页中提取所有链接? 回答1 以纯文本/ html格式下载java文件,并通过Jsoup或html clean传递它们,两者相似,甚至可以用于解析格式错误的html 4.0语法,然后可以使用流行的HTML DOM解析方法,例如getElementsByName(“ a”)或在jsoup中它甚至很酷,您只需使用 File input = new File("/tmp/input.html"); Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/"); Elements links = doc.select("a[href]"); // a with href Elements pngs = doc.select("img[src$=.png]"); // img with src ending .png Element masthead = doc.select("div.masthead").first(); 并找到所有链接,然后使用 String linkhref=links.attr("href"); 取自http://jsoup.org/cookbook/extracting-data/selector-syntax 如果您知道jQuery函数链接
  • 如何从具有.html扩展名的网页以编程方式下载pdf文件?(How to download a pdf file programmatically from a webpage with .html extension?)
    问题 我在这个论坛上已经审查了所有类似的问题(不仅是这个!),并尝试了所有这些方法,但是仍然无法以编程方式下载测试文件:http://pdfobject.com/markup/examples/full-browser- window.html 以下是我要下载的测试文件的直接链接。 这是一个具有开放访问权限的测试pdf文件,因此任何人都可以使用它来测试下载方法。 如何下载此特定文件,使其具有pdf扩展名? 回答1 要下载文件,也许您可​​以尝试执行以下操作: import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; public final class FileDownloader { private FileDownloader(){} public static void main(String args[]) throws IOException{ download("http://pdfobject.com/pdf/sample.pdf", new File("sample.pdf")); } public
  • Java实现简单爬虫的学习
    1: 网络爬虫是做什么的? 他的主要工作就是 跟据指定的url地址 去发送请求,获得响应, 然后解析响应 , 一方面从响应中查找出想要查找的数据,另一方面从响应中解析出新的URL路径, 然后继续访问,继续解析;继续查找需要的这就是网络爬虫主要干的工作 2、,根据这些也就能设计出一个简单的网络爬虫出来.一个简单的爬虫 必需的功能: 发送请求和获取响应的功能 解析响应的功能 对过滤出的数据 进行存储 的功能 对解析出来的URL路径 处理的功能 3、下面是包结构 4、编写RequestAndResponseTool类,主要方法: 发送请求,返回响应,并把响应封装成 page 类 ; package com.etoak.crawl.page; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod