htmlparser

HtmlParser + HttpClient 实现爬虫

*爱你&永不变心* 提交于 2020-03-24 09:44:11
简易爬虫的实现 HttpClient 提供了便利的 HTTP 协议访问,使得我们可以很容易的得到某个网页的源码并保存在本地;HtmlParser 提供了如此简便灵巧的类库,可以从网页中便捷的提取出指向其他网页的超链接。笔者结合这两个开源包,构建了一个简易的网络爬虫。 爬虫 (Crawler) 原理 学过数据结构的读者都知道有向图这种数据结构。如下图所示,如果将网页看成是图中的某一个节点,而将网页中指向其他网页的链接看成是这个节点指向其他节点的边,那么我们很容易将整个 Internet 上的网页建模成一个有向图。理论上,通过遍历算法遍历该图,可以访问到Internet 上的几乎所有的网页。最简单的遍历就是宽度优先以及深度优先。以下笔者实现的简易爬虫就是使用了宽度优先的爬行策略。 图 2. 网页关系的建模图 简易爬虫实现流程 在看简易爬虫的实现代码之前,先介绍一下简易爬虫爬取网页的流程。 图 3. 爬虫流程图 各个类的源码以及说明 对应上面的流程图,简易爬虫由下面几个类组成,各个类职责如下: Crawler.java:爬虫的主方法入口所在的类,实现爬取的主要流程。 LinkDb.java:用来保存已经访问的 url 和待爬取的 url 的类,提供url出对入队操作。 Queue.java: 实现了一个简单的队列,在 LinkDb.java 中使用了此类。 FileDownloader

JAVA爬虫(一)

谁说胖子不能爱 提交于 2020-02-27 06:50:28
JAVA爬虫(一) jar包准备: htmlparser.jar httpclient-4.1.2.jar HttpClient: 用于模拟客户端请求 HttpClient httpClient = new DefaultHttpClient(); HttpGet:请求方式,还有HttpPost。 HttpGet httpGet = new HttpGet(url); HttpResponse:服务器响应 HttpResponse response = httpClient.execute(httpGet); //获取响应状态 int status = response.getStatusLine().getStatusCode(); HttpEntity:响应实体 //一般响应码若为200,即可获得Entity HttpEntity entity = response.getEntity(); //可将entity转化为字符串或byte数组 byte[] bytes = EntityUtils.toByteArray(entity); String msg1 = EntityUtils.toString(entity); String msg2 = EntityUtils.toString(entity, "UTF-8"); HtmlParser: Parser:用于解析url

HTML 中的预留字符(如标签的小于号 < )必须被替换为字符实体( < )。 不间断空格( )

◇◆丶佛笑我妖孽 提交于 2020-02-17 05:21:45
1. 参考 HTML 字符实体 Python处理HTML转义字符 比方说一个从网页中抓到的字符串 html = '<abc>' 用Python可以这样处理: import HTMLParser html_parser = HTMLParser.HTMLParser() txt = html_parser.unescape(html) #这样就得到了txt = '<abc>' 如果还想转回去,可以这样: import cgi html = cgi.escape(txt) # 这样又回到了 html = '<abc&gt' 2. 常用 显示结果 描述 实体名称 实体编号 空格     < 小于号 < < > 大于号 > > & 和号 & & " 引号 " " ' 撇号 &apos; (IE不支持) ' 3. 代码 1 In [354]: soup = BeautifulSoup("“Dammit!” he said.") 2 3 In [355]: unicode(soup) 4 Out[355]: u'<html><body><p>\u201cDammit!\u201d he said.</p></body></html>' 5 6 In [358]: str(soup) 7 Out[358]: '<html><body><p>\xe2\x80\x9cDammit!\xe2\x80

net core体系-网络数据采集(AngleSharp)-1初探

有些话、适合烂在心里 提交于 2020-02-05 23:17:13
有这么一本Python的书: <<Python 网络数据采集>> 我准备用.NET Core及第三方库实现里面所有的例子. 这是第一部分, 主要使用的是AngleSharp: https://anglesharp.github.io/ (文章的章节书与该书是对应的) 发送Http请求 在python里面这样发送http请求, 它使用的是python的标准库urllib: 在.NET Core里面, 你可以使用 HttpClient , 相应的C#代码如下: var client = new HttpClient(); HttpResponseMessage response = await client.GetAsync("http://pythonscraping.com/pages/page1.html"); response.EnsureSuccessStatusCode(); var responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseBody); return responseBody; 或者可以简写为: var client = new HttpClient(); var responseBody = await client

.NET Core 网络数据采集 -- 使用AngleSharp做html解析

梦想与她 提交于 2020-02-05 22:43:13
有这么一本Python的书: <<Python 网络数据采集>> 我准备用.NET Core及第三方库实现里面所有的例子. 这是第一部分, 主要使用的是AngleSharp: https://anglesharp.github.io/ (文章的章节书与该书是对应的) 第1章 初见网络爬虫 发送Http请求 在python里面这样发送http请求, 它使用的是python的标准库urllib: 在.NET Core里面, 你可以使用 HttpClient , 相应的C#代码如下: var client = new HttpClient(); HttpResponseMessage response = await client.GetAsync("http://pythonscraping.com/pages/page1.html"); response.EnsureSuccessStatusCode(); var responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseBody); return responseBody; 或者可以简写为: var client = new HttpClient(); var responseBody = await client

webmagic的设计机制及原理-如何开发一个Java爬虫 转

╄→尐↘猪︶ㄣ 提交于 2020-01-19 21:49:17
此文章是webmagic 0.1.0版的设计手册,后续版本的入门及用户手册请看这里: https://github.com/code4craft/webmagic/blob/master/user-manual.md 之前就有网友在博客里留言,觉得webmagic的实现比较有意思,想要借此研究一下爬虫。最近终于集中精力,花了三天时间,终于写完了这篇文章。之前垂直爬虫写了一年多,webmagic框架写了一个多月,这方面倒是有一些心得,希望对读者有帮助。 webmagic的目标 一般来说,一个爬虫包括几个部分: 页面下载 页面下载是一个爬虫的基础。下载页面之后才能进行其他后续操作。 链接提取 一般爬虫都会有一些初始的种子URL,但是这些URL对于爬虫是远远不够的。爬虫在爬页面的时候,需要不断发现新的链接。 URL管理 最基础的URL管理,就是对已经爬过的URL和没有爬的URL做区分,防止重复爬取。 内容分析和持久化 一般来说,我们最终需要的都不是原始的HTML页面。我们需要对爬到的页面进行分析,转化成结构化的数据,并存储下来。 不同的爬虫,对这几部分的要求是不一样的。 <!--more--> 对于通用型的爬虫,例如搜索引擎蜘蛛,需要指对互联网大部分网页无差别进行抓取。这时候难点就在于页面下载和链接管理上--如果要高效的抓取更多页面,就必须进行更快的下载;同时随着链接数量的增多

HTMLParser-简单HTML和XHTML解析

好久不见. 提交于 2020-01-02 13:56:38
使用HTMLParser模块解析HTML页面 HTMLParser是python用来解析html和xhtml文件格式的模块。它可以分析出html里面的标签、数据等等,是一种处理html的简便途径。HTMLParser采用的是一种事件驱动的模式,当HTMLParser找到一个特定的标记时,它会去调用一个用户定义的函数,以此来通知程序处理。它主要的回调函数的命名都是以handler_开头的,都HTMLParser的成员函数。当我们使用时,就从HTMLParser派生出新的类,然后重新定义这几个以handler_开头的函数即可。和在htmllib中的解析器不同,这个解析器并不是基于sgmllib模块的SGML解析器。 htmllib模块和sgmllib模块从Python2.6开始不鼓励使用,3.0以后的版本中被移除~~~ HTMLParser class HTMLParser.HTMLParser The HTMLParser class is instantiated without arguments. HTMLParser类不需要参数进行实例化。 An HTMLParser instance is fed HTML data and calls handler functions when tags begin and end. The HTMLParser class is

利用Python抓取和解析网页

ぃ、小莉子 提交于 2019-12-23 21:29:56
  【 IT168 技术专稿 】对搜索引擎、文件索引、文档转换、数据检索、站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理。事实上,通过Python语言提供的各种模块,我们无需借助Web 服务器 或者Web浏览器就能够解析和处理HTML文档。本文将详细介绍如何利用Python抓取和解析网页。首先,我们介绍一个可以帮助简化打开位于本地和Web上的HTML文档的Python模块,然后,我们论述如何使用Python模块来迅速解析在HTML文件中的数据,从而处理特定的内容,如链接、图像和Cookie等。最后,我们会给出一个规整HTML文件的格式标签的例子,通过这个例子您会发现使用python处理HTML文件的内容是非常简单的一件事情。    一、解析URL   通过Python所带的urlparse模块,我们能够轻松地把URL分解成元件,之后,还能将这些元件重新组装成一个URL。当我们处理HTML 文档的时候,这项功能是非常方便的。    import urlparse   parsedTuple = urlparse.urlparse(    " http://www.google.com/search?   hl = en & q = urlparse & btnG = Google + Search " )   unparsedURL = urlparse

使用HTMLParser模块解析HTML页面

本小妞迷上赌 提交于 2019-12-23 15:57:37
HTMLParser是python用来解析html和xhtml文件格式的模块。它可以分析出html里面的标签、数据等等,是一种处理html的简便途径。HTMLParser采用的是一种事件驱动的模式,当HTMLParser找到一个特定的标记时,它会去调用一个用户定义的函数,以此来通知程序处理。它主要的回调函数的命名都是以handler_开头的,都HTMLParser的成员函数。当我们使用时,就从HTMLParser派生出新的类,然后重新定义这几个以handler_开头的函数即可。和在 htmllib 中的解析器不同,这个解析器并不是基于 sgmllib 模块的SGML解析器。 htmllib 模块和 sgmllib 模块 从Python2.6开始不鼓励使用,3.0以后的版本中被移除~~~ HTMLParser class HTMLParser. HTMLParser The HTMLParser class is instantiated without arguments. HTMLParser类不需要参数进行实例化。 An HTMLParser instance is fed HTML data and calls handler functions when tags begin and end. The HTMLParser class is meant to be

爬虫解析库:XPath

痴心易碎 提交于 2019-12-12 21:47:33
XPath     XPath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。最初是用来搜寻 XML 文档的,但同样适用于 HTML 文档的搜索。所以在做爬虫时完全可以使用 XPath 做相应的信息抽取。 1. XPath 概览     XPath 的选择功能十分强大,它提供了非常简洁明了的路径选择表达式。另外,它还提供了超过 100 个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有想要定位的节点都可以用 XPath 来选择。     官方文档: https://www.w3.org/TR/xpath/ 2. XPath 常用规则 表达式 描述 nodename 选取此节点的所有子节点 / 从当前节点选区直接子节点 // 从当前节点选取子孙节点 . 选取当前节点 .. 选取当前节点的父节点 @ 选取属性     这里列出了 XPath 的常用匹配规则,示例如下: //title[@lang='eng']     这是一个 XPath 规则,代表的是选择所有名称为 title,同时属性 lang 的值为 eng 的节点,后面会通过 Python 的 lxml 库,利用 XPath 进行 HTML 的解析。 3. 安装 windows->python3环境下:pip install lxml 4.