当前位置:文档之家› htmlparser实现从网页上抓取数据

htmlparser实现从网页上抓取数据

htmlparser实现从网页上抓取数据
htmlparser实现从网页上抓取数据

package parser;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import https://www.doczj.com/doc/8d10797189.html,.MalformedURLException;

import https://www.doczj.com/doc/8d10797189.html,.URL;

/**

* 基本能实现网页抓取,不过要手动输入URL 将整个html内容保存到指定文件*

* @author chenguoyong

*

*/

public class ScrubSelectedWeb {

private final static String CRLF = System.getProperty("line.separator");

/**

* @param args

*/

public static void main(String[] args) {

try {

URL ur = new URL("http://10.249.187.199:8083/injs100/");

InputStream instr = ur.openStream();

String s, str;

BufferedReader in = new BufferedReader(new InputStreamReader(instr));

StringBuffer sb = new StringBuffer();

BufferedWriter out = new BufferedWriter(new FileWriter(

"D:/outPut.txt"));

while ((s = in.readLine()) != null) {

sb.append(s + CRLF);

}

System.out.println(sb);

str = new String(sb);

out.write(str);

out.close();

in.close();

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

基本能实现网页抓取,不过要手动输入URL,此外没有重构。只是一个简单的思路。1.htmlparser 使用

htmlparser是一个纯的java写的html解析的库,htmlparser不依赖于其它的java库,htmlparser主要用于改造或提取html。htmlparser能超高速解析html,而且不会出错。毫不夸张地说,htmlparser就是目前最好的html解析和分析的工具。无论你是想抓取网页数据还是改造html的内容,用了htmlparser绝对会忍不住称赞。由于htmlparser 结构设计精良,所以扩展htmlparser 非常便利。

Htmlparser中文论坛. https://www.doczj.com/doc/8d10797189.html,/thread.php?fid=6

Parser()

Parser(URLConnection connection)

Construct a parser using the provided URLConnection.

Method:

static Parser createParser(String html, String charset)

Creates the parser on an input string.

void visitAllNodesWith(NodeVisitor visitor)

Apply the given visitor to the current page.

NodeList extractAllNodesThatMatch(NodeFilter filter)

Filter the list with the given filter non-recursively.

NodeList extractAllNodesThatMatch(NodeFilter filter, boolean recursive) Filter the list with the given filter.

Node elementAt(int i)

1. html代码里面所有的链接地址和链接名称

package parser;

import org.htmlparser.Parser;

import org.htmlparser.Node;

import org.htmlparser.NodeFilter;

import org.htmlparser.Parser;

import org.htmlparser.filters.TagNameFilter;

import org.htmlparser.tags.LinkTag;

import org.htmlparser.tags.TableTag;

import org.htmlparser.util.NodeList;

import org.htmlparser.util.ParserException;

import org.htmlparser.visitors.HtmlPage;

/**

* htmlparser取得一段html代码里面所有的链接地址和链接名称

*

* @author chenguoyong

*

*/

public class Testhtmlparser {

/**

* @param args

*/

public static void main(String[] args) {

String htmlcode = "AAA"

+ "连接1"

+ "连接2";

// 创建Parser对象根据传给字符串和指定的编码

Parser parser = Parser.createParser(htmlcode, "GBK");

// 创建HtmlPage对象HtmlPage(Parser parser)

HtmlPage page = new HtmlPage(parser);

try {

// HtmlPage extends visitor,Apply the given visitor to the current

// page.

parser.visitAllNodesWith(page);

} catch (ParserException e1) {

e1 = null;

}

// 所有的节点

NodeList nodelist = page.getBody();

// 建立一个节点filter用于过滤节点

NodeFilter filter = new TagNameFilter("A");

// 得到所有过滤后,想要的节点

nodelist = nodelist.extractAllNodesThatMatch(filter, true);

for (int i = 0; i < nodelist.size(); i++) {

LinkTag link = (LinkTag) nodelist.elementAt(i);

// 链接地址

System.out.println(link.getAttribute("href") + "\n");

// 链接名称

System.out.println(link.getStringText());

}

}

}

结果如下:

https://www.doczj.com/doc/8d10797189.html,/u/20080522/14/0ff402ef-c382-499a-8213-ba6b2f550 425.html

连接1

https://www.doczj.com/doc/8d10797189.html,

连接2

2. 使用HtmlParser抓去网页内容

package parser;

import org.htmlparser.Parser;

import org.htmlparser.beans.StringBean;

import org.htmlparser.filters.NodeClassFilter;

import org.htmlparser.parserapplications.StringExtractor;

import org.htmlparser.tags.BodyTag;

import org.htmlparser.util.NodeList;

import org.htmlparser.util.ParserException;

/**

* 使用HtmlParser抓去网页内容: 要抓去页面的内容最方便的方法就是使用StringBean. 里面有几个控制页面内容的几个参数.

* 在后面的代码中会有说明. Htmlparser包中还有一个示例StringExtractor 里面有个直接得到内容的方法,

* 其中也是使用了StringBean . 另外直接解析Parser的每个标签也可以的.

*

* @author chenguoyong

*

*/

public class GetContent {

public void getContentUsingStringBean(String url) {

StringBean sb = new StringBean();

sb.setLinks(true); // 是否显示web页面的连接(Links)

// 为了取得页面的整洁美观一般设置上面两项为true , 如果要保持页面的原有格式, 如代码页面的空格缩进可以设置为false

sb.setCollapse(true); // 如果是true的话把一系列空白字符用一个字符替代.

sb.setReplaceNonBreakingSpaces(true);// If true regular space

sb

.setURL("https://www.doczj.com/doc/8d10797189.html,/51AOP/archive/2006/07/19/59064.html");

System.out.println("The Content is :\n" + sb.getStrings());

}

public void getContentUsingStringExtractor(String url, boolean link) {

// StringExtractor内部机制和上面的一样.做了一下包装

StringExtractor se = new StringExtractor(url);

String text = null;

try {

text = se.extractStrings(link);

System.out.println("The content is :\n" + text);

} catch (ParserException e) {

e.printStackTrace();

}

}

public void getContentUsingParser(String url) {

NodeList nl;

try {

Parser p = new Parser(url);

nl = p.parse(new NodeClassFilter(BodyTag.class));

BodyTag bt = (BodyTag) nl.elementAt(0);

System.out.println(bt.toPlainTextString()); // 保留原来的内容格式. 包含js代码} catch (ParserException e) {

e.printStackTrace();

}

}

/**

* @param args

*/

public static void main(String[] args) {

String url = "https://www.doczj.com/doc/8d10797189.html,/51AOP/archive/2006/07/19/59064.html";

//new GetContent().getContentUsingParser(url);

//--------------------------------------------------

new GetContent().getContentUsingStringBean(url);

}

}

3.将整个html内容保存到指定文件

package parser;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import https://www.doczj.com/doc/8d10797189.html,.MalformedURLException;

import https://www.doczj.com/doc/8d10797189.html,.URL;

* 基本能实现网页抓取,不过要手动输入URL 将整个html内容保存到指定文件*

* @author chenguoyong

*

*/

public class ScrubSelectedWeb {

private final static String CRLF = System.getProperty("line.separator");

/**

* @param args

*/

public static void main(String[] args) {

try {

URL ur = new URL("https://www.doczj.com/doc/8d10797189.html,/");

InputStream instr = ur.openStream();

String s, str;

BufferedReader in = new BufferedReader(new InputStreamReader(instr));

StringBuffer sb = new StringBuffer();

BufferedWriter out = new BufferedWriter(new FileWriter(

"D:/outPut.txt"));

while ((s = in.readLine()) != null) {

sb.append(s + CRLF);

}

System.out.println(sb);

str = new String(sb);

out.write(str);

out.close();

in.close();

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

4利用htmlparser提取网页纯文本的例子

package parser;

import org.htmlparser.Node;

import org.htmlparser.NodeFilter;

import org.htmlparser.Parser;

import org.htmlparser.filters.TagNameFilter;

import org.htmlparser.tags.TableTag;

import org.htmlparser.util.NodeList;

/**

* 标题:利用htmlparser提取网页纯文本的例子

*/

public class TestHTMLParser2 {

/**

* 读取目标html内容

*

*/

public static void testHtml() {

try {

String sCurrentLine;

String sTotalString;

sCurrentLine = "";

sTotalString = "";

java.io.InputStream l_urlStream;

https://www.doczj.com/doc/8d10797189.html,.URL l_url = new https://www.doczj.com/doc/8d10797189.html,.URL(

"http://10.249.187.199:8083/injs100/");

https://www.doczj.com/doc/8d10797189.html,.HttpURLConnection l_connection = (https://www.doczj.com/doc/8d10797189.html,.HttpURLConnection) l_url

.openConnection();

l_connection.connect();

l_urlStream = l_connection.getInputStream();

java.io.BufferedReader l_reader = new java.io.BufferedReader(

new java.io.InputStreamReader(l_urlStream));

while ((sCurrentLine = l_reader.readLine()) != null) {

sTotalString += sCurrentLine + "\r\n";

}

String testText = extractText(sTotalString);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 抽取纯文本信息

* @param inputHtml:html文本

* @return

* @throws Exception

*/

public static String extractText(String inputHtml) throws Exception { StringBuffer text = new StringBuffer();

Parser parser = Parser.createParser(new String(inputHtml.getBytes(), "GBK"), "GBK");

// 遍历所有的节点

NodeList nodes = parser.extractAllNodesThatMatch(new NodeFilter() { public boolean accept(Node node) {

return true;

}

});

System.out.println(nodes.size());

for (int i = 0; i < nodes.size(); i++) {

Node nodet = nodes.elementAt(i);

//字符串的代表性节点:节点的描述

text.append(new String(nodet.toPlainTextString().getBytes("GBK"))

+ "\r\n");

}

return text.toString();

}

/**

* 读取文件的方式/utl 来分析内容. filePath也可以是一个Url.

* @param resource :文件/Url

* @throws Exception

*/

public static void test5(String resource) throws Exception {

Parser myParser = new Parser(resource);

myParser.setEncoding("GBK");

String filterStr = "table";

NodeFilter filter = new TagNameFilter(filterStr);

NodeList nodeList = myParser.extractAllNodesThatMatch(filter);

/*for(int i=0;i

{

TableTag tabletag = (TableTag) nodeList.elementAt(i);

//标签名称

System.out.println(tabletag.getTagName());

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

}*/

TableTag tabletag = (TableTag) nodeList.elementAt(1);

}

public static void main(String[] args) throws Exception {

test5("http://10.249.187.199:8083/injs100/");

//testHtml();

}

}

5.html解析table

package parser;

import org.apache.log4j.Logger;

import org.htmlparser.NodeFilter;

import org.htmlparser.Parser;

import org.htmlparser.filters.NodeClassFilter;

import org.htmlparser.filters.OrFilter;

import org.htmlparser.filters.TagNameFilter;

import org.htmlparser.tags.TableColumn;

import org.htmlparser.tags.TableRow;

import org.htmlparser.tags.TableTag;

import org.htmlparser.util.NodeList;

import org.htmlparser.util.ParserException;

import junit.framework.TestCase;

public class ParserTestCase extends TestCase {

private static final Logger logger = Logger.getLogger(ParserTestCase.class);

public ParserTestCase(String name) {

super(name);

}

/**

* 测试对

*

*

*

*

的解析

*/

public void testTable() {

Parser myParser;

NodeList nodeList = null;

myParser = Parser

.createParser(

" "

+ "

"

+ "

"

+ "

"

+ "

1-111-121-13
1-211-221-23
1-311-321-33
"

+ "

"

+ "

"

+ "

"

+ "

2-112-122-13
2-212-222-23
2-312-322-33
"

+ "", "GBK");

NodeFilter tableFilter = new NodeClassFilter(TableTag.class);

OrFilter lastFilter = new OrFilter();

lastFilter.setPredicates(new NodeFilter[] { tableFilter });

try {

nodeList = myParser.parse(lastFilter);

for (int i = 0; i <= nodeList.size(); i++) {

if (nodeList.elementAt(i) instanceof TableTag) {

TableTag tag = (TableTag) nodeList.elementAt(i);

TableRow[] rows = tag.getRows();

for (int j = 0; j < rows.length; j++) {

TableRow tr = (TableRow) rows[j];

System.out.println(tr.getAttribute("id"));

if (tr.getAttribute("id").equalsIgnoreCase("tro1")) {

TableColumn[] td = tr.getColumns();

for (int k = 0; k < td.length; k++) {

// logger.fatal("" +

// td[k].toPlainTextString());

System.out.println(""

+ td[k].toPlainTextString());

}

}

}

}

}

} catch (ParserException e) {

e.printStackTrace();

}

}

/**

* 得到目标数据

*

* @param url:目标url

* @throws Exception

*/

public static void getDatabyUrl(String url) throws Exception {

Parser myParser = new Parser(url);

NodeList nodeList = null;

myParser.setEncoding("gb2312");

NodeFilter tableFilter = new NodeClassFilter(TableTag.class);

OrFilter lastFilter = new OrFilter();

lastFilter.setPredicates(new NodeFilter[] { tableFilter });

try {

nodeList = myParser.parse(lastFilter);

// 可以从数据table的size:19-21开始到结束

for (int i = 15; i <= nodeList.size(); i++) {

if (nodeList.elementAt(i) instanceof TableTag) {

TableTag tag = (TableTag) nodeList.elementAt(i);

TableRow[] rows = tag.getRows();

for (int j = 0; j < rows.length; j++) {

TableRow tr = (TableRow) rows[j];

if (tr.getAttribute("id") != null

&& tr.getAttribute("id").equalsIgnoreCase(

"tr02")) {

TableColumn[] td = tr.getColumns();

// 对不起,没有你要查询的记录!

if (td.length == 1) {

System.out.println("对不起,没有你要查询的记录");

} else {

for (int k = 0; k < td.length; k++) {

System.out.println("内容:"

+ td[k].toPlainTextString().trim());

}

}

}

}

}

}

} catch (ParserException e) {

e.printStackTrace();

}

}

/**

* 测试已经得出有数据时table:22个,没有数据时table:19个

*

* @param args

*/

public static void main(String[] args) {

try {

//

getDatabyUrl("https://www.doczj.com/doc/8d10797189.html,/user/querytonebytype.do?field=tonecode&condition=619505 000000008942&type=1006&pkValue=619505000000008942");

getDatabyUrl("https://www.doczj.com/doc/8d10797189.html,/user/querytonebytype.do?field=tonecode&condition=61 9272000000001712&type=1006&pkValue=619272000000001712");

} catch (Exception e) {

e.printStackTrace();

}

}

}

6.html解析常用

package com.jscud.test;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStreamReader;

import org.htmlparser.Node;

import org.htmlparser.NodeFilter;

import org.htmlparser.Parser;

import org.htmlparser.filters.NodeClassFilter;

import org.htmlparser.filters.OrFilter;

import org.htmlparser.nodes.TextNode;

import org.htmlparser.tags.LinkTag;

import org.htmlparser.util.NodeList;

import org.htmlparser.util.ParserException;

import org.htmlparser.visitors.HtmlPage;

import org.htmlparser.visitors.TextExtractingVisitor;

import com.jscud.util.LogMan; //一个日志记录类

/**

* 演示了Html Parse的应用.

*

* @author scud https://www.doczj.com/doc/8d10797189.html, (https://www.doczj.com/doc/8d10797189.html,/)

*/

public class ParseHtmlTest

{

public static void main(String[] args) throws Exception

{

String aFile = "e:/jscud/temp/test.htm";

String content = readTextFile(aFile, "GBK");

test1(content);

System.out.println("====================================");

test2(content);

System.out.println("====================================");

test3(content);

System.out.println("====================================");

test4(content);

System.out.println("====================================");

test5(aFile);

System.out.println("====================================");

//访问外部资源,相对慢

test5("https://www.doczj.com/doc/8d10797189.html, (https://www.doczj.com/doc/8d10797189.html,/)");

System.out.println("===================================="); }

/**

* 读取文件的方式来分析内容.

* filePath也可以是一个Url.

*

* @param resource 文件/Url

*/

public static void test5(String resource) throws Exception

{

Parser myParser = new Parser(resource);

//设置编码

myParser.setEncoding("GBK");

HtmlPage visitor = new HtmlPage(myParser);

myParser.visitAllNodesWith(visitor);

String textInPage = visitor.getTitle();

System.out.println(textInPage);

}

/**

* 按页面方式处理.对一个标准的Html页面,推荐使用此种方式.

*/

public static void test4(String content) throws Exception

{

Parser myParser;

myParser = Parser.createParser(content, "GBK");

HtmlPage visitor = new HtmlPage(myParser);

myParser.visitAllNodesWith(visitor);

String textInPage = visitor.getTitle();

System.out.println(textInPage);

}

/**

* 利用Visitor模式解析html页面.

*

* 小优点:翻译了<>等符号

* 缺点:好多空格,无法提取link

*

*/

public static void test3(String content) throws Exception

{

Parser myParser;

myParser = Parser.createParser(content, "GBK"); TextExtractingVisitor visitor = new TextExtractingVisitor(); myParser.visitAllNodesWith(visitor);

String textInPage = visitor.getExtractedText();

System.out.println(textInPage);

}

/**

* 得到普通文本和链接的内容.

*

* 使用了过滤条件.

*/

public static void test2(String content) throws ParserException {

Parser myParser;

NodeList nodeList = null;

myParser = Parser.createParser(content, "GBK");

NodeFilter textFilter = new NodeClassFilter(TextNode.class); NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);

//暂时不处理meta

//NodeFilter metaFilter = new NodeClassFilter(MetaTag.class);

OrFilter lastFilter = new OrFilter();

lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter }); nodeList = myParser.parse(lastFilter);

Node[] nodes = nodeList.toNodeArray();

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

{

Node anode = (Node) nodes[i];

String line = "";

if (anode instanceof TextNode)

{

TextNode textnode = (TextNode) anode;

//line = textnode.toPlainTextString().trim();

line = textnode.getText();

}

else if (anode instanceof LinkTag)

{

LinkTag linknode = (LinkTag) anode;

line = linknode.getLink();

//@todo ("") 过滤jsp标签:可以自己实现这个函数

//line = StringFunc.replace(line, "<%.*%>", "");

}

if (isTrimEmpty(line))

continue;

System.out.println(line);

}

}

/**

* 解析普通文本节点.

*

* @param content

* @throws ParserException

*/

public static void test1(String content) throws ParserException {

Parser myParser;

Node[] nodes = null;

myParser = Parser.createParser(content, null);

nodes = myParser.extractAllNodesThatAre(TextNode.class); //exception could be thrown here

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

{

TextNode textnode = (TextNode) nodes[i];

String line = textnode.toPlainTextString().trim();

if (line.equals(""))

continue;

System.out.println(line);

}

}

/**

* 读取一个文件到字符串里.

*

* @param sFileName 文件名

* @param sEncode String

* @return 文件内容

*/

public static String readTextFile(String sFileName, String sEncode)

{

StringBuffer sbStr = new StringBuffer();

try

{

File ff = new File(sFileName);

InputStreamReader read = new InputStreamReader(new FileInputStream(ff),

sEncode);

BufferedReader ins = new BufferedReader(read);

String dataLine = "";

while (null != (dataLine = ins.readLine()))

{

sbStr.append(dataLine);

sbStr.append("\r\n");

}

ins.close();

catch (Exception e)

{

LogMan.error("read Text File Error", e);

}

return sbStr.toString();

}

/**

* 去掉左右空格后字符串是否为空

* @param astr String

* @return boolean

*/

public static boolean isTrimEmpty(String astr) {

if ((null == astr) || (astr.length() == 0))

{

return true;

}

if (isBlank(astr.trim()))

{

return true;

}

return false;

}

/**

* 字符串是否为空:null或者长度为0.

* @param astr 源字符串.

* @return boolean

*/

public static boolean isBlank(String astr) {

if ((null == astr) || (astr.length() == 0))

{

return true;

}

else

{

return false;

}

}

2.使用HttpClient 和HtmlParser 实现简易爬虫

本小结简单的介绍一下HttpClinet 和HtmlParser 两个开源的项目,以及他们的网站和提供下载的地址。

HttpClient 简介

HTTP 协议是现在的因特网最重要的协议之一。除了WEB 浏览器之外,WEB 服务,基于网络的应用程序以及日益增长的网络计算不断扩展着HTTP 协议的角色,使得越来越多的应用程序需要HTTP 协议的支持。虽然JA V A 类库.net 包提供了基本功能,来使用HTTP 协议访问网络资源,但是其灵活性和功能远不能满足很多应用程序的需要。而Jakarta Commons HttpClient 组件寻求提供更为灵活,更加高效的HTTP 协议支持,简化基于HTTP 协议的应用程序的创建。HttpClient 提供了很多的特性,支持最新的HTTP 标准,可以访问这里了解更多关于HttpClinet 的详细信息。目前有很多的开源项目都用到了HttpClient 提供的HTTP功能,登陆网址可以查看这些项目。本文中使用HttpClinet 提供的类库来访问和下载Internet上面的网页,在后续部分会详细介绍到其提供的两种请求网络资源的方法:Get 请求和Post 请求。Apatche 提供免费的HTTPClien t源码和JAR 包下载,可以登陆这里下载最新的HttpClient 组件。笔者使用的是HttpClient3.1。

HtmlParser 简介

当今的Internet 上面有数亿记的网页,越来越多应用程序将这些网页作为分析和处理的数据对象。这些网页多为半结构化的文本,有着大量的标签和嵌套的结构。当我们自己开发一些处理网页的应用程序时,会想到要开发一个单独的网页解析器,这一部分的工作必定需要付出相当的精力和时间。事实上,做为JA V A 应用程序开发者,HtmlParser 为其提供了强大而灵活易用的开源类库,大大节省了写一个网页解析器的开销。HtmlParser 是https://www.doczj.com/doc/8d10797189.html, 上活跃的一个开源项目,它提供了线性和嵌套两种方式来解析网页,主要用于html 网页的转换(Transformation) 以及网页内容的抽取(Extraction)。HtmlParser 有如下一些易于使用的特性:过滤器(Filters),访问者模式(Visitors),处理自定义标签以及易于使用的JavaBeans。正如HtmlParser 首页所说:它是一个快速,健壮以及严格测试过的组件;以它设计的简洁,程序运行的速度以及处理Internet 上真实网页的能力吸引着越来越多的开发者。本文中就是利用HtmlParser 里提取网页里的链接,实现简易爬虫里的关键部分。HtmlParser 最新的版本是HtmlParser1.6,可以登陆这里下载其源码、API 参考文档以及JAR 包。

简单强大的StringBean

如果你想要网页中去掉所有的标签后剩下的文本,那就是用StringBean 吧。以下简单的代码可以帮你解决这样的问题:

清单5

StringBean sb = new StringBean();

sb.setLinks(false);//设置结果中去点链接

sb.setURL(url);//设置你所需要滤掉网页标签的页面url

System.out.println(sb.getStrings());//打印结果

HtmlParser 提供了强大的类库来处理网页,由于本文旨在简单的介绍,因此只是将与笔者后续爬虫部分有关的关键类库进行了示例说明。感兴趣的读者可以专门来研究一下HtmlParser 更为强大的类库。

如何抓取网页数据,以抓取安居客举例

如何抓取网页数据,以抓取安居客举例 互联网时代,网页上有丰富的数据资源。我们在工作项目、学习过程或者学术研究等情况下,往往需要大量数据的支持。那么,该如何抓取这些所需的网页数据呢? 对于有编程基础的同学而言,可以写个爬虫程序,抓取网页数据。对于没有编程基础的同学而言,可以选择一款合适的爬虫工具,来抓取网页数据。 高度增长的抓取网页数据需求,推动了爬虫工具这一市场的成型与繁荣。目前,市面上有诸多爬虫工具可供选择(八爪鱼、集搜客、火车头、神箭手、造数等)。每个爬虫工具功能、定位、适宜人群不尽相同,大家可按需选择。本文使用的是操作简单、功能强大的八爪鱼采集器。以下是一个使用八爪鱼抓取网页数据的完整示例。示例中采集的是安居客-深圳-新房-全部楼盘的数据。 采集网站:https://https://www.doczj.com/doc/8d10797189.html,/loupan/all/p2/ 步骤1:创建采集任务 1)进入主界面,选择“自定义模式”

如何抓取网页数据,以抓取安居客举例图1 2)将要采集的网址复制粘贴到网站输入框中,点击“保存网址”

如何抓取网页数据,以抓取安居客举例图2 步骤2:创建翻页循环 1)在页面右上角,打开“流程”,以展现出“流程设计器”和“定制当前操作”两个板块。将页面下拉到底部,点击“下一页”按钮,在右侧的操作提示框中,选择“循环点击下一页”,以建立一个翻页循环

如何抓取网页数据,以抓取安居客举例图3 步骤3:创建列表循环并提取数据 1)移动鼠标,选中页面里的第一个楼盘信息区块。系统会识别此区块中的子元素,在操作提示框中,选择“选中子元素”

如何抓取网页数据,以抓取安居客举例图4 2)系统会自动识别出页面中的其他同类元素,在操作提示框中,选择“选中全部”,以建立一个列表循环

python抓取网页数据的常见方法

https://www.doczj.com/doc/8d10797189.html, python抓取网页数据的常见方法 很多时候爬虫去抓取数据,其实更多是模拟的人操作,只不过面向网页,我们看到的是html在CSS样式辅助下呈现的样子,但爬虫面对的是带着各类标签的html。下面介绍python抓取网页数据的常见方法。 一、Urllib抓取网页数据 Urllib是python内置的HTTP请求库 包括以下模块:urllib.request 请求模块、urllib.error 异常处理模块、urllib.parse url解析模块、urllib.robotparser robots.txt解析模块urlopen 关于urllib.request.urlopen参数的介绍: urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) url参数的使用 先写一个简单的例子:

https://www.doczj.com/doc/8d10797189.html, import urllib.request response = urllib.request.urlopen(' print(response.read().decode('utf-8')) urlopen一般常用的有三个参数,它的参数如下: urllib.requeset.urlopen(url,data,timeout) response.read()可以获取到网页的内容,如果没有read(),将返回如下内容 data参数的使用 上述的例子是通过请求百度的get请求获得百度,下面使用urllib的post请求 这里通过https://www.doczj.com/doc/8d10797189.html,/post网站演示(该网站可以作为练习使用urllib的一个站点使用,可以 模拟各种请求操作)。 import urllib.parse import urllib.request data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf8')

如何抓取网页数据

https://www.doczj.com/doc/8d10797189.html, 如何抓取网页数据 很多用户不懂爬虫代码,但是却对网页数据有迫切的需求。那么怎么抓取网页数据呢? 本文便教大家如何通过八爪鱼采集器来采集数据,八爪鱼是一款通用的网页数据采集器,可以在很短的时间内,轻松从各种不同的网站或者网页获取大量的规范化数据,帮助任何需要从网页获取信息的客户实现数据自动化采集,编辑,规范化,摆脱对人工搜索及收集数据的依赖,从而降低获取信息的成本,提高效率。 本文示例以京东评论网站为例 京东评价采集采集数据字段:会员ID,会员级别,评价星级,评价内容,评价时间,点赞数,评论数,追评时间,追评内容,页面网址,页面标题,采集时间。 需要采集京东内容的,在网页简易模式界面里点击京东进去之后可以看到所有关于京东的规则信息,我们直接使用就可以的。

https://www.doczj.com/doc/8d10797189.html, 京东评价采集步骤1 采集京东商品评论(下图所示)即打开京东主页输入关键词进行搜索,采集搜索到的内容。 1、找到京东商品评论规则然后点击立即使用

https://www.doczj.com/doc/8d10797189.html, 京东评价采集步骤2 2、简易模式中京东商品评论的任务界面介绍 查看详情:点开可以看到示例网址 任务名:自定义任务名,默认为京东商品评论 任务组:给任务划分一个保存任务的组,如果不设置会有一个默认组 商品评论URL列表:提供要采集的网页网址,即商品评论页的链接。每个商品的链接必须以#comment结束,这个链接可以在商品列表点评论数打开后进行复制。或者自己打开商品链接后手动添加,如果没有这个后缀可能会报错。多个商品评论输入多个商品网址即可。 将鼠标移动到?号图标可以查看详细的注释信息。 示例数据:这个规则采集的所有字段信息。

网页抓取工具如何进行http模拟请求

网页抓取工具如何进行http模拟请求 在使用网页抓取工具采集网页是,进行http模拟请求可以通过浏览器自动获取登录cookie、返回头信息,查看源码等。具体如何操作呢?这里分享给大家网页抓取工具火车采集器V9中的http模拟请求。许多请求工具都是仿照火车采集器中的请求工具所写,因此大家可以此为例学习一下。 http模拟请求可以设置如何发起一个http请求,包括设置请求信息,返回头信息等。并具有自动提交的功能。工具主要包含两大部分:一个MDI父窗体和请求配置窗体。 1.1请求地址:正确填写请求的链接。 1.2请求信息:常规设置和更高级设置两部分。 (1)常规设置: ①来源页:正确填写请求页来源页地址。 ②发送方式:get和post,当选择post时,请在发送数据文本框正确填写发布数据。 ③客户端:选择或粘贴浏览器类型至此处。 ④cookie值:读取本地登录信息和自定义两种选择。 高级设置:包含如图所示系列设置,当不需要以上高级设置时,点击关闭按钮即可。 ①网页压缩:选择压缩方式,可全选,对应请求头信息的Accept-Encoding。 ②网页编码:自动识别和自定义两种选择,若选中自定义,自定义后面会出现编

码选择框,在选择框选择请求的编码。 ③Keep-Alive:决定当前请求是否与internet资源建立持久性链接。 ④自动跳转:决定当前请求是否应跟随重定向响应。 ⑤基于Windows身份验证类型的表单:正确填写用户名,密码,域即可,无身份认证时不必填写。 ⑥更多发送头信息:显示发送的头信息,以列表形式显示更清晰直观的了解到请求的头信息。此处的头信息供用户选填的,若要将某一名称的头信息进行请求,勾选Header名对应的复选框即可,Header名和Header值都是可以进行编辑的。 1.3返回头信息:将详细罗列请求成功之后返回的头信息,如下图。 1.4源码:待请求完毕后,工具会自动跳转到源码选项,在此可查看请求成功之后所返回的页面源码信息。 1.5预览:可在此预览请求成功之后返回的页面。 1.6自动操作选项:可设置自动刷新/提交的时间间隔和运行次数,启用此操作后,工具会自动的按一定的时间间隔和运行次数向服务器自动请求,若想取消此操作,点击后面的停止按钮即可。 配置好上述信息后,点击“开始查看”按钮即可查看请求信息,返回头信息等,为避免填写请求信息,可以点击“粘贴外部监视HTTP请求数据”按钮粘贴请求的头信息,然后点击开始查看按钮即可。这种捷径是在粘贴的头信息格式正确的前提下,否则会弹出错误提示框。 更多有关网页抓取工具或网页采集的教程都可以从火车采集器的系列教程中学习借鉴。

网页数据抓取方法详解

https://www.doczj.com/doc/8d10797189.html, 网页数据抓取方法详解 互联网时代,网络上有海量的信息,有时我们需要筛选找到我们需要的信息。很多朋友对于如何简单有效获取数据毫无头绪,今天给大家详解网页数据抓取方法,希望对大家有帮助。 八爪鱼是一款通用的网页数据采集器,可实现全网数据(网页、论坛、移动互联网、QQ空间、电话号码、邮箱、图片等信息)的自动采集。同时八爪鱼提供单机采集和云采集两种采集方式,另外针对不同的用户还有自定义采集和简易采集等主要采集模式可供选择。

https://www.doczj.com/doc/8d10797189.html, 如果想要自动抓取数据呢,八爪鱼的自动采集就派上用场了。 定时采集是八爪鱼采集器为需要持续更新网站信息的用户提供的精确到分钟的,可以设定采集时间段的功能。在设置好正确的采集规则后,八爪鱼会根据设置的时间在云服务器启动采集任务进行数据的采集。定时采集的功能必须使用云采集的时候,才会进行数据的采集,单机采集是无法进行定时采集的。 定时云采集的设置有两种方法: 方法一:任务字段配置完毕后,点击‘选中全部’→‘采集以下数据’→‘保存并开始采集’,进入到“运行任务”界面,点击‘设置定时云采集’,弹出‘定时云采集’配置页面。

https://www.doczj.com/doc/8d10797189.html, 第一、如果需要保存定时设置,在‘已保存的配置’输入框内输入名称,再保存配置,保存成功之后,下次如果其他任务需要同样的定时配置时可以选择这个配置。 第二、定时方式的设置有4种,可以根据自己的需求选择启动方式和启动时间。所有设置完成之后,如果需要启动定时云采集选择下方‘保存并启动’定时采集,然后点击确定即可。如果不需要启动只需点击下方‘保存’定时采集设置即可。

国内主要信息抓取软件盘点

国内主要信息抓取软件盘点 近年来,随着国内大数据战略越来越清晰,数据抓取和信息采集系列产品迎来了巨大的发展 机遇,采集产品数量也出现迅猛增长。然而与产品种类快速增长相反的是,信息采集技术相 对薄弱、市场竞争激烈、质量良莠不齐。在此,本文列出当前信息采集和数据抓取市场最具 影响力的六大品牌,供各大数据和情报中心建设单位采购时参考: TOP.1 乐思网络信息采集系统 乐思网络信息采系统的主要目标就是解决网络信息采集和网络数据抓取问题。是根据用户自定义的任务配置,批量而精确地抽取因特网目标网页中的半结构化与非结构化数据,转化为结构化的记录,保存在本地数据库中,用于内部使用或外网发布,快速实现外部信息的获取。 主要用于:大数据基础建设,舆情监测,品牌监测,价格监测,门户网站新闻采集,行业资讯采集,竞争情报获取,商业数据整合,市场研究,数据库营销等领域。 TOP.2 火车采集器 火车采集器是一款专业的网络数据采集/信息挖掘处理软件,通过灵活的配置,可以很轻松迅速地从网页上抓取结构化的文本、图片、文件等资源信息,可编辑筛选处理后选择发布到网站后台,各类文件或其他数据库系统中。被广泛应用于数据采集挖掘、垂直搜索、信息汇聚和门户、企业网信息汇聚、商业情报、论坛或博客迁移、智能信息代理、个人信息检索等领域,适用于各类对数据有采集挖掘需求的群体。 TOP.3 熊猫采集软件 熊猫采集软件利用熊猫精准搜索引擎的解析内核,实现对网页内容的仿浏览器解析,在此基础上利用原创的技术实现对网页框架内容与核心内容的分离、抽取,并实现相似页面的有效比对、匹配。因此,用户只需要指定一个参考页面,熊猫采集软件系统就可以据此来匹配类似的页面,来实现用户需要采集资料的批量采集。 TOP.4 狂人采集器 狂人采集器是一套专业的网站内容采集软件,支持各类论坛的帖子和回复采集,网站和博客文章内容抓取,通过相关配置,能轻松的采集80%的网站内容为己所用。根据各建站程序

我用ajax获取后台数据并展示在前端页面的方法【源码】

我用ajax获取后台数据并展示在前端页面的方法【源码】 WEB前端开发与传统的网页制作最大的一个区别就是:以前的网页制作只是涉及到一些图片制作、切图、然后实现静态页面的布局;而WEB前端开发既然涉及到开发,就会和后台打交道,后台或数据库里边的信息要根据用户的需求显示在前端特定的位置上,供用户查看。所以现在的前端开发不仅仅是会点div、css或者是简单的javascript特效就可以了。 今天为大家说一下如何运用Ajax调用后台数据显示在前端页面。 源码中有详细的注释说明,只要懂得Ajax的基本工作原理和javascript和运行机制,就能看得懂。 下面是我在本地环境中测试的案例源代码: HTML部分:

CSS部分: *{margin:0px;padding:0px} tr{list-style:none;clear:both;margin-bottom:10px} table{counter-reset:count;margin:0px} tr:before{list-style:none;content:counter(count);counter-increment:count 1;display:block;float:left;width:20px;height:20px;background:#ccc;color:#fff;te xt-align:center;line-height:20px;margin-right:10px} table tr td{padding:0px 10px;line-height:30px;font-size:14px} Javascript部分: var oList = ("list"); var oBtn = ("btn"); ame+"所属球队:"+data[i].belong+"" } = str; } //通过ajax获取后台数据 function ajax(method,url,ayne){ var xhr = null; if{ xhr = new XMLHttpRequest(); }else{

国内主要数据采集和抓取工具

国内6大网络信息采集和页面数据抓取工具 近年来,随着国内大数据战略越来越清晰,数据抓取和信息采集系列产品迎来了巨大的发展机遇,采集产品数量也出现迅猛增长。然而与产品种类快速增长相反的是,信息采集技术相对薄弱、市场竞争激烈、质量良莠不齐。在此,本文列出当前信息采集和数据抓取市场最具影响力的六大品牌,供各大数据和情报中心建设单位采购时参考: TOP.1 乐思网络信息采集系统(https://www.doczj.com/doc/8d10797189.html,) 乐思网络信息采系统的主要目标就是解决网络信息采集和网络数据抓取问题。是根据用户自定义的任务配置,批量而精确地抽取因特网目标网页中的半结构化与非结构化数据,转化为结构化的记录,保存在本地数据库中,用于内部使用或外网发布,快速实现外部信息的获取。 该系统主要用于:大数据基础建设,舆情监测,品牌监测,价格监测,门户网站新闻采集,行业资讯采集,竞争情报获取,商业数据整合,市场研究,数据库营销等领域。 TOP.2 火车采集器(https://www.doczj.com/doc/8d10797189.html,) 火车采集器是一款专业的网络数据采集/信息挖掘处理软件,通过灵活的配置,可以很轻松迅速地从网页上抓取结构化的文本、图片、文件等资源信息,可编辑筛选处理后选择发布到网站后台,各类文件或其他数据库系统中。被广泛应用于数据采集挖掘、垂直搜索、信息汇聚和门户、企业网信息汇聚、商业情报、论坛或博客迁移、智能信息代理、个人信息检索等领域,适用于各类对数据有采集挖掘需求的群体。 TOP.3 熊猫采集软件(https://www.doczj.com/doc/8d10797189.html,) 熊猫采集软件利用熊猫精准搜索引擎的解析内核,实现对网页内容的仿浏览器解析,在此基础上利用原创的技术实现对网页框架内容与核心内容的分离、抽取,并实现相似页面的有效比对、匹配。因此,用户只需要指定一个参考页面,熊猫采集软件系统就可以据此来匹配类似的页面,来实现用户需要采集资料的批量采集。 TOP.4 狂人采集器(https://www.doczj.com/doc/8d10797189.html,) 狂人采集器是一套专业的网站内容采集软件,支持各类论坛的帖子和回复采集,网站和博客文章内容抓取,通过相关配置,能轻松的采集80%的网站内容为己所用。根据各建站程序的区别,狂人采集器分论坛采集器、CMS采集器和博客采集器三类,总计支持近40种主流建站程序的上百个版本的数据采集和发布任务,支持图片本地化,支持网站登陆采集,分页抓取,全面模拟人工登陆发布,软件运行快速安全稳定!论坛采集器还支持论坛会员无限注册,自动增加帖子查看人数,自动顶贴等。 TOP.5 网络神采(https://www.doczj.com/doc/8d10797189.html,) 网络神采是一款专业的网络信息采集系统,通过灵活的规则可以从任何类型的网站采集信息,

网页内容如何批量提取

https://www.doczj.com/doc/8d10797189.html, 网页内容如何批量提取 网站上有许多优质的内容或者是文章,我们想批量采集下来慢慢研究,但内容太多,分布在不同的网站,这时如何才能高效、快速地把这些有价值的内容收集到一起呢? 本文向大家介绍一款网络数据采集工具【八爪鱼数据采集】,以【新浪博客】为例,教大家如何使用八爪鱼采集软件采集新浪博客文章内容的方法。 采集网站: https://www.doczj.com/doc/8d10797189.html,/s/articlelist_1406314195_0_1.html 采集的内容包括:博客文章正文,标题,标签,分类,日期。 步骤1:创建新浪博客文章采集任务 1)进入主界面,选择“自定义采集”

https://www.doczj.com/doc/8d10797189.html, 2)将要采集的网址URL复制粘贴到网站输入框中,点击“保存网址”

https://www.doczj.com/doc/8d10797189.html, 步骤2:创建翻页循环

https://www.doczj.com/doc/8d10797189.html, 1)打开网页之后,打开右上角的流程按钮,使制作的流程可见状态。点击页面下方的“下一页”,如图,选择“循环点击单个链接”,翻页循环创建完成。(可在左上角流程中手动点击“循环翻页”和“点击翻页”几次,测试是否正常翻页。) 2)由于进入详情页时网页加载很慢,网址一直在转圈状态,无法立即执行下一个步骤,因此在“循环翻页”的高级选项里设置“ajax加载数据”,超时时间设置为5秒,点击“确定”。

https://www.doczj.com/doc/8d10797189.html, 步骤3:创建列表循环 1)鼠标点击列表目录中第一个博文,选择操作提示框中的“选中全部”。 2)鼠标点击“循环点击每个链接”,列表循环就创建完成,并进入到第一个循环项的详情页面。

网站数据爬取方法

https://www.doczj.com/doc/8d10797189.html, 网站数据爬取方法 网站数据主要是指网页上的文字,图像,声音,视频这几类,在告诉的信息化时代,如何去爬取这些网站数据显得至关重要。对于程序员或开发人员来说,拥有编程能力使得他们能轻松构建一个网页数据抓取程序,但是对于大多数没有任何编程知识的用户来说,一些好用的网络爬虫软件则显得非常的重要了。以下是一些使用八爪鱼采集器抓取网页数据的几种解决方案: 1、从动态网页中提取内容。 网页可以是静态的也可以是动态的。通常情况下,您想要提取的网页内容会随着访问网站的时间而改变。通常,这个网站是一个动态网站,它使用AJAX技术或其他技术来使网页内容能够及时更新。AJAX即延时加载、异步更新的一种脚本技术,通过在后台与服务器进行少量数据交换,可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

https://www.doczj.com/doc/8d10797189.html, 表现特征为点击网页中某个选项时,大部分网站的网址不会改变;网页不是完全加载,只是局部进行了数据加载,有所变化。这个时候你可以在八爪鱼的元素“高级选项”的“Ajax加载”中可以设置,就能抓取Ajax加载的网页数据了。 八爪鱼中的AJAX加载设置

https://www.doczj.com/doc/8d10797189.html, 2.从网页中抓取隐藏的内容。 你有没有想过从网站上获取特定的数据,但是当你触发链接或鼠标悬停在某处时,内容会出现?例如,下图中的网站需要鼠标移动到选择彩票上才能显示出分类,这对这种可以设置“鼠标移动到该链接上”的功能,就能抓取网页中隐藏的内容了。 鼠标移动到该链接上的内容采集方法

https://www.doczj.com/doc/8d10797189.html, 在滚动到网页底部之后,有些网站只会出现一部分你要提取的数据。例如今日头条首页,您需要不停地滚动到网页的底部以此加载更多文章内容,无限滚动的网站通常会使用AJAX或JavaScript来从网站请求额外的内容。在这种情况下,您可以设置AJAX超时设置并选择滚动方法和滚动时间以从网页中提取内容。

大数据抓取工具推荐

https://www.doczj.com/doc/8d10797189.html, 大数据抓取工具推荐 大数据已经成了互联网时代最热门的词之一,采集器也成了数据行业人人都需要的工具。作为一个不会打代码的小白,如何进行数据采集呢?市面上有一些大数据抓取工具。八爪鱼和造数就是其中两款采集器,对于不会写爬虫代码的朋友来说,找到一款合适的采集器,可以达到事半功倍的效果。本文就两款采集器的优缺点做一个对比,仅供大家参考。 造数是一个基于云端爬取的智能云爬虫服务站点,通过一套网页分析的算法,分析出网页中结构化的数据,然后再爬取页面中的数据,无需编程基础,只需输入网址,选取所需的数据,就可轻松获取互联网的公开数据,并以 Excel 表格等形式下载,或使用 API 与企业内部系统深度整合。 造数有什么优缺点呢? 优点: 云端采集网页,不需要占用电脑资源下载软件 采集到数据以后可以设置数据自动推送 缺点: 1、不支持全自动网站登录采集,也不支持本地采集,采集比较容易受到限制 2、不能采集滚动页面,最多支持两个层级的采集,采集不是很灵活 然后我们看一下八爪鱼 八爪鱼是非常适合技术小白的一款采集器,技术比较成熟,功能强大,操作简单。八爪鱼采集器的各方面的功能都比较完善,云采集是它的一大特色,相比其他采集软件,云采集能够做到更加精准、高效和大规模。还有识别验证码、提供优质代理IP 、UA 自动切换等智能防封的组合功能,在采集过程都不用担心网站的限制。如果不想创建采集任务,可以到客户端直接使用简易采集模式,选择模板,设置参数马上就可以拿到数据。

https://www.doczj.com/doc/8d10797189.html, 八爪鱼有什么优缺点呢? 1、功能强大。八爪鱼采集器是一款通用爬虫,可应对各种网页的复杂结构(瀑布流等)和防采集措施(登录、验证码、封IP),实现百分之九十九的网页数据抓取。 2、入门容易。7.0版本推出的简易网页采集,内置主流网站大量数据源和已经写好的采集规则。用户只需输入关键词,即可采集到大量所需数据 3、流程可视化。真正意义上实现了操作流程可视化,用户可打开流程按钮,直接可见操作流程,并对每一步骤,进行高级选项的设置(修改ajax/ xpath等)。 缺点: 1、不能提供文件托管,不能直接发布采集到的数据 2、不支持视频和app采集 相关链接: 八爪鱼使用功能点视频教程 https://www.doczj.com/doc/8d10797189.html,/tutorial/videotutorial/videognd 八爪鱼爬虫软件入门准备 https://www.doczj.com/doc/8d10797189.html,/tutorial/xsksrm/rmzb

百度贴吧内容抓取工具-让你的网站一夜之间内容丰富

百度贴吧内容抓取工具-让你的网站一夜之间内容丰富 [hide] 百度帖吧内容抓取工具

var $getreplytime=1; var $showimg=1; var $showcon=1; var $showauthor=1; var $showreplytime=1; var $showsn=0; var $showhr=0; var $replylista=array(); var $pat_reply="<\/a>(.+?)


<\/td>\r\n<\/tr><\/table>"; var $pat_pagecount="尾页<\/font><\/a>"; var $pat_title="(.+?)<\/font>"; var $pat_replycon="<\/td>\r\n\r\n
(.+?)<\/td><\/tr><\/table>\r\n<\/td><\/tr>"; var $pat_author="作者:(?:|)(.+?)(?:<\/a>|) \r\n"; var $pat_img=""; var $pat_replytime=" ([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2})+ <\/font>"; var $defaulturl="https://www.doczj.com/doc/8d10797189.html,/f?kz=87576027"; function import(){ $this->setconfig(); if(isset($_POST["act"])){ $this->getconfig(); $this->showform(); $this->act(); }else{ $this->showform(); } } function setconfig(){ $this->url=isset($_POST["url"])?$_POST["url"]this->defaulturl; $this->url=eregi_replace("[&]?pn=([0-9]+)","",$this->url); $this->beginpage=isset($_POST["beginpage"])?$_POST["beginpage"]:0; $this->endpage=isset($_POST["endpage"])?$_POST["endpage"]:50; $this->endpage=min($this->maxpagecount,$this->endpage); $this->timeout=min(isset($_POST["timeout"])?$_POST["timeout"]:30,$this->maxtimeout); $this->showimg=isset($_POST["showimg"])?$_POST["showimg"]:1; $this->showcon=isset($_POST["showcon"])?$_POST["showcon"]:1; $this->showauthor=isset($_POST["showauthor"])?$_POST["showauthor"]:0; $this->showreplytime=isset($_POST["showreplytime"])?$_POST["showreplytime"]:0; $this->showhr=isset($_POST["showhr"])?$_POST["showhr"]:1; $this->showsn=isset($_POST["showsn"])?$_POST["showsn"]:0;

php获取网页内容方法

1.file_get_contents获取网页内容 2.curl获取网页内容 3.fopen->fread->fclose获取网页内容

利用R从网站上抓数据

Webscraping using readLines and RCurl There is a massive amount of data available on the web. Some of it is in the form of precompiled, downloadable datasets which are easy to access. But the majority of online data exists as web content such as blogs, news stories and cooking recipes. With precompiled files, accessing the data is fairly straightforward; just download the file, unzip if necessary, and import into R. For “wild” data however, getting the data into an analyzeable format is more difficult. Acce ssing online data of this sort is sometimes reffered to as “webscraping”. Two R facilities, readLines() from the base package and getURL() from the RCurl package make this task possible. readLines For basic webscraping tasks the readLines() function will usually suffice. readLines() allows simple access to webpage source data on non-secure servers. In its simplest form, readLines() takes a single argument – the URL of the web page to be read: web_page <- readLines("https://www.doczj.com/doc/8d10797189.html,") As an example of a (somewhat) practical use of webscraping, imagine a scenario in which we wanted to know the 10 most frequent posters to the R-help listserve for January 2009. Because the listserve is on a secure site (e.g. it has https:// rather than http:// in the URL) we can't easily access the live version with readLines(). So for this example, I've posted a local copy of the list archives on the this site. One note, by itself readLines() can only acquire the data. You'll need to use grep(), gsub() or equivalents to parse the data and keep what you need. # Get the page's source web_page <- readLines("https://www.doczj.com/doc/8d10797189.html,/jan09rlist.html") # Pull out the appropriate line author_lines <- web_page[grep("", web_page)] # Delete unwanted characters in the lines we pulled out authors <- gsub("", "", author_lines, fixed = TRUE) # Present only the ten most frequent posters author_counts <- sort(table(authors), decreasing = TRUE) author_counts[1:10]

网络爬虫工具如何爬取网站数据

https://www.doczj.com/doc/8d10797189.html, 网络爬虫的基本原理是什么 目前网络爬虫已经是当下最火热的一个话题,许多新兴技术比如VR、智能机器人等等,都是依赖于底层对大数据的分析,而大数据又是从何而来呢?其中最常用的手段即是使用网络爬虫工具去获取。提起网络爬虫工具,很多小伙伴还可能没这么接触过。本文将解决以下问题:网络爬虫是什么,基本原理是什么;网络爬虫工具是什么;八爪鱼采集器是什么;三者的关系是什么。 先上重点:八爪鱼是一个网页采集器,网页采集器是一种专门的爬虫工具。 爬虫、网页采集器、八爪鱼关系图

https://www.doczj.com/doc/8d10797189.html, 一、网络爬虫是什么,原理是什么 爬虫是什么:网络爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。又被称为网页蜘蛛,聚焦爬虫,网络机器人。在FOAF社区中间,更经常的称为网页追逐者,另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 爬虫工作原理:网络爬虫系统一般会选择一些比较重要的、出度(网页中链出超链接数)较大的网站的URL作为种子URL集合。以这些种子集合作为初始URL,开始数据抓取。 其基本工作流程如下: 1)将这些种子URL集合放入待抓取URL队列。 2)从待抓取URL队列中,取出待抓取URL,解析DNS,并且得到主机的ip,并将URL 对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。3)分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL 队列,从而进入下一个循环。如此反复进行,直到遍历了整个网络或者满足某种条件后,才会停止下来。

https://www.doczj.com/doc/8d10797189.html, 爬虫工具原理 二、网页采集器是什么八爪鱼采集器是什么 网页采集器:这里讲的网页采集器,专门指会根据用户的指令或者设置,从指定的网页上获取用户指定内容的工具软件。严格来讲,这里说的网页采集器也是爬虫的一种。 八爪鱼采集器:八爪鱼采集器就是一种网页采集器,用户可以设置从哪个网站爬取数据,爬取那些数据,爬取什么范围的数据,什么时候去爬取数据,爬取的数据如何保存等等。 八爪鱼采集的核心原理是:模拟人浏览网页,复制数据的行为,通过记录和模拟人的一系列上网行为,代替人眼浏览网页,代替人手工复制网页数据,从而实现自动化从网页采集数据,然后通过不断重复一系列设定的动作流程,实现全自动采集大量数据。 八爪鱼采集器可应对各种网页的复杂结构(AJAX页面、瀑布流等)和防采集措施(登录、

如何抓取网页数据

网页源码中规则数据的获取过程: 第一步:获取网页源码。 第二步:使用正则表达式匹配抽取所需要的数据。 第三步:将结果进行保存。 这里只介绍第一步。 https://www.doczj.com/doc/8d10797189.html,.HttpWebRequest; https://www.doczj.com/doc/8d10797189.html,.HttpWebResponse; System.IO.Stream; System.IO.StreamReader; System.IO.FileStream; 通过C#程序来获取访问页面的内容(网页源代码)并实现将内容保存到本机的文件中。 方法一是通过https://www.doczj.com/doc/8d10797189.html,的两个关键的类 https://www.doczj.com/doc/8d10797189.html,.HttpWebRequest; https://www.doczj.com/doc/8d10797189.html,.HttpWebResponse; 来实现的。 具体代码如下 方案0:网上的代码,看明白这个就可以用方案一和方案二了 HttpWebRequest httpReq; HttpWebResponse httpResp; string strBuff = ""; char[] cbuffer = new char[256]; int byteRead = 0; string filename = @"c:\log.txt"; ///定义写入流操作 public void WriteStream() { Uri httpURL = new Uri(txtURL.Text); ///HttpWebRequest类继承于WebRequest,并没有自己的构造函数,需通过WebRequest 的Creat方法建立,并进行强制的类型转换 httpReq = (HttpWebRequest)WebRequest.Create(httpURL); ///通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换 httpResp = (HttpWebResponse) httpReq.GetResponse(); ///GetResponseStream()方法获取HTTP响应的数据流,并尝试取得URL中所指定的网页内容///若成功取得网页的内容,则以System.IO.Stream形式返回,若失败则产生 ProtoclViolationException错误。在此正确的做法应将以下的代码放到一个try块中处理。这里简单处理 Stream respStream = httpResp.GetResponseStream(); ///返回的内容是Stream形式的,所以可以利用StreamReader类获取GetResponseStream的内容,并以StreamReader类的Read方法依次读取网页源程序代码每一行的内容,直至行尾(读取的编码格式:UTF8) StreamReader respStreamReader = new StreamReader(respStream,Encoding.UTF8); byteRead = respStreamReader.Read(cbuffer,0,256);

1.怎样定义抓取网页数据的规则

1 怎样定义抓取网页数据的规则 MetaSeeker工具的用处是定义抓取网页数据的规则,就像首 页所说,手工编写抓取网 页数据的规则容易出错,MetaSeeker能够自动生成抓取规则,使用直观的图形化界面,将人为编码错误的可能降到最 小,而且能够用极短的时间定义一套新的信息提取规则。 与其它网页数据抓取工具不同,MetaSeeker首先引导用户为目标网页定义语义结构(我们称之为信息结构), 并且存储到信息结构描述文件中,这一步看似多余,实际上意义重大,因为目标网站的页面结构可能随着时间进行改变,例如,网站软件进行升级等,原先定义的抓 取网页数据的规则可能会部分失效,需要针对最新页面结构进行调整,调整信息结 构要比直接调整抓取规则直观的多,因为信息结构直接对应网页内容的语义结构, 加上图 形化用户界面(GUI)的便利性,锁定目标网站信息结构变化很容易。 另外,定义信息结构,而不是直接对网页在浏览器上的展现形式或者HTML源代码文 档进行分析,网站更换界面风格(称为皮肤,skin或者 theme)或者修改HTML文档中各内容块的位置和顺序不会导致原先定义的网页数据抓取规则失效。 定义信息结构还有更重大的意义,将网页数据抓取演进到语义网络时代的内容格式化和结构化数据(data sets)管理,抓取下来的结构化网页数据由于包含语义元数据,既可以很 容易的集成到Web 2.0的服务器系统中,例如,垂直搜索、SNS、商品比价服务、商业情报(智能)分析等等,又可以顺利地向Web 3.0(语义网络)时代演进,例如,建设异构数据 对象搜索、结构化数据对象的多形式展现(例如,手机搜索或者手机mashup混搭)等。 与其它网页数据抓取工具的另外一个重大区别是:MetaSeeker工具包将生成抓取网页数据规则和使用抓取规则进行数据抽取的工作分到两个软件工 具上,即MetaStudio 和DataScraper, 是一种高度模块化设计,而且增加了部署的灵活性。实际上,生成网页数据 抓取规则和爬行网络提取信息是两个泾渭分明的任务,分别用不同的模块实现可以最恰当 的贴合软件运行逻辑,例如,DataScraper采用了工作流框架,既确保软件执行效率又确保系统的扩展性,如果想增强DataScraper爬行网络 的能力,只需要扩展工作流的处理节点即可,关于DataScraper的特点和分析留待《DataScraper 使用手册》详述。 MetaStudio生成的抓取网页数据的规则存储在信息提取指令文件中,即数据提取指令 文件和线索提取指令文件,顾名思义,这两个文件命令DataScraper连续不断地从目标网站 上抓取页面数据和网页上的超链接。

文本预览
相关文档 最新文档