CN105608134B - 一种基于多线程的网络爬虫系统及其网页爬取方法 - Google Patents
一种基于多线程的网络爬虫系统及其网页爬取方法 Download PDFInfo
- Publication number
- CN105608134B CN105608134B CN201510949494.2A CN201510949494A CN105608134B CN 105608134 B CN105608134 B CN 105608134B CN 201510949494 A CN201510949494 A CN 201510949494A CN 105608134 B CN105608134 B CN 105608134B
- Authority
- CN
- China
- Prior art keywords
- url
- crawl
- information
- web page
- webpage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 17
- 238000012545 processing Methods 0.000 claims abstract description 24
- 230000014509 gene expression Effects 0.000 claims abstract description 22
- 230000009193 crawling Effects 0.000 claims abstract description 13
- 239000000284 extract Substances 0.000 claims abstract description 4
- 230000007246 mechanism Effects 0.000 claims description 4
- 238000004891 communication Methods 0.000 claims description 3
- 238000012217 deletion Methods 0.000 claims description 3
- 230000037430 deletion Effects 0.000 claims description 3
- 230000001256 tonic effect Effects 0.000 claims 1
- 230000001960 triggered effect Effects 0.000 abstract 1
- 230000006870 function Effects 0.000 description 18
- 239000011800 void material Substances 0.000 description 10
- 230000000694 effects Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 241000239290 Araneae Species 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000005316 response function Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种基于多线程的基于多线程的网络爬虫系统,包括URL处理模块,通过URL类处理获得每个URL的主机名,端口号,文件名;网页爬取模块,对网页内容进行分块抓取,并将抓取的网页保存至暂存模块;网页分析模块,提取URL,对URL进行重定向,对URL进行判重处理,删除重复的URL;网页存储模块,在存储文件时判断是否存在该文件,如果不存在,则直接爬取该文件;如果存在并且此次爬取网页所获得的内容比上一次爬取的多,则覆盖原来的文件;否则,丢弃该文件。先输入与正则表达式匹配的网址,发送网页请求信号,然后触发槽函数获取匹配,最后得到包含关键字的具体信息,爬去速度快,效率高。
Description
技术领域
本发明涉及一种基于多线程的网络爬虫系统,具体地涉及一种网页爬取速度快、效率高的基于多线程的网络爬虫系统及其网页爬取方法。
背景技术
网络爬虫就像是互联网这张网上爬来爬去的蜘蛛。通过网页的链接地址,网络爬虫通过从网站首页读取内容、寻找到进入下一个网页的其他链接。通过这样的循环反复,网络爬虫抓取完这个网站的所有需要的网页。
爬虫程序能够自动地获取网页。在搜索引擎中它有负责因特网中网页下载的主要的功能,在引擎中起到关键的作用。从爬虫程序来看,对搜索结构都会产生直接影响的是它所采用的实现策略以及运行效率。每个搜索引擎有着不同的需求,从而要选择进行最佳爬行策略。这样才能将网络信息搜索的完美完成。因此,搜索爬虫程序体现了它的优致和效率,才能将获取的信息展现的更准确更及时。
每个爬虫都有不同的应用场景,因此有不同种类的爬虫拥有不同的功能,可以将爬虫分为3种类型:
a) 批量型爬虫:如果针对的网页是已知的并且范围是确定的,那么可以使用批量型爬虫,当爬虫完成了爬取所要求的网页的时候,既可以停止抓取了。具体目标可能有所不同,也可能是只要达到特定的网页量就可以了,也可能是只要在特定的时间之内完成抓取就可以了等等。
b) 增量型爬虫:这一类网络爬虫与上面介绍的爬虫的不同点在于,它会一直去爬取网页。如果抓取到的网页发生变化,这个爬虫也会立刻进行爬取,因为在整个网络中的网页在每时每刻都在发生变化,突然发生添加网页、网页被删掉或者网页内容被修改,这些操作都是用来满足用户体验的,但是对于增量型爬虫需要及时更新它所爬取到的东西,所以在处于这个过程当中,不需要重新去抓取新的网页,而是去更新被爬取的网页。这种爬虫适用于通用的商业搜索引擎。
c) 垂直型爬虫:这类网络爬虫是依照网页自身的内容来爬取的,它一般爬取一些围绕某个主题的网页的内容进行爬取或者围绕某个所需要的行业的网页来爬取,它只要去爬取仅仅某一个行业的相关网页,就不用了解其他行业的任何信息。这类爬虫需要关注的焦点在于:如何因为系统资源的有限,我们不能把所有的资源都利用到爬取所有的网页,从里面再去寻找我们所需要的资源这样就大大减少了资源的利用率啦,所以我们需要爬虫能够做到尽快尽可能去寻找到与这个主题最匹配的网页,最好不要去抓取那些完全没必要的网页,从而便可以节省资源。所以这样的爬虫就会局限在垂直搜索网站或者垂直行业网站。
网络爬虫的实现方法是由应用的不同属性来设定的,但是它们都有共同的特性,应该具备四种不同的特性。
a) 高性能,这里的性能是指爬虫在某个特定时间内爬取互联网上的网页数量,一般的评价方法是将每一秒网络爬虫能够下载的网页数越多,那么这个网络爬虫的性能就越高。因为URL的数量非常大,所以不一样的实现方法就会使得爬虫的性能会使得性能差别很大,所以要选择好的数据结构,这样才会产生高性能。
b) 可扩展性,爬虫系统的可扩展性是指在网页数量庞大的情况下,还需要能缩短网络爬虫的抓取的周期,就是要能够很容易通过抓取服务器和爬虫的数量来达到这个性能。
c) 健壮性,其实这个在所有的系统当中都是所要求的,就是用来面度很多种非正常的情况,例如爬虫爬得太深,会导致栈溢出,所以要求爬虫能够对各种各样的异常情况能够正确处理就显得至关重要了,这种健壮性使得爬虫程序能够做到在出现故障的时候,重新启动爬虫之后,使得之前爬取的网页内容和结构还能出现,而不是重新再来。
d) 友好性,其中有两个层次的意义,一是指维护网站用户的信息安全,二是减少没有用的大量爬虫对网站的爬取。很多东西对于网站所有人来说是不希望被搜索到的,因此要有对应的算法,来选择哪些东西是不允许被抓取的。
但是,现有的基于多线程的网络爬虫系统,普遍存在爬取速度慢,效率低下的问题,而且程序非常复杂,不易维护。
发明内容
针对上述技术问题,本发明目的是:提供一种基于多线程的网络爬虫系统及其网页爬取方法,利用信号与插槽机制,先输入与正则表达式匹配的网址,产生了这个发送获取网页的请求的信号,然后根据这个信号触发了槽函数,获取所匹配的东西,最后得到包含关键字的具体信息;爬去速度快,效率高。
本发明的技术方案是:
一种基于多线程的基于多线程的网络爬虫系统,其特征在于,包括URL处理模块、网页爬取模块、网页分析模块和网页存储模块;
所述URL处理模块,通过URL类处理获得每个URL的主机名,端口号,文件名;
所述网页爬取模块,对网页内容进行分块抓取,并将抓取的网页保存至暂存模块;
所述网页分析模块,提取URL,对URL进行重定向,对URL进行判重处理,删除重复的URL;
所述网页存储模块,在存储文件时判断是否存在该文件,如果不存在,则直接爬取该文件;如果存在并且此次爬取网页所获得的内容比上一次爬取的多,则覆盖原来的文件;否则,丢弃该文件。
优选的,所述URL处理模块处理包括如下步骤:
a) URL的文件成员在最后以‘\0’结尾;若该文件成员没有路径,将路径变成‘/’;
b) 若在URL的文件成员中包含特殊字符,将该特殊字符之前的所以字符作为文件,将该特殊字符之后的所有字符删除;
c) 如果在URL中没有表示端口号,则将端口成员的值设置为80;
d) 如果URL没有主机名的属性,则将主机名成员的值默认为初始URL的主机名。
优选的,使用信号与槽在对象间建立通信,用于发送请求和接收回复。
优选的,所述网页分析模块在获取到URL后利用正则表达式对URL进行验证判断,包括以下步骤:
(1)首先根据文本的输入框输入的网址进行验证判断,如果网址为空或者长度为0,则输出错误提示信息,利用QMessageBox输出提示信息;
(2)利用正则表达式验证是否是以http为协议的网址,如果不匹配,输出错误提示信息;若匹配,则请求获取网页内容;所述正则表达式为按照一个已知的字符串模式去匹配获取的字符串。
优选的,还包括关键字匹配查找模块,用于对输入的文本进行验证,对符合要求的信息存储于列表中,并且进行一一对应,按照序号递增;根据列表中每个信息项对文本中作是否包含的判断,若包含则将文本存放进界面的表格布局的布局项中,并且将序号递增。
优选的,所述网页分析模块对所读取的html信息进行解析,利用正则表达式处理,获取所有的处理信息数目,并且删除空白和特殊字符;将网页的信息以换行符为依据分隔形成列表项,将该列表项的长度作为序号;然后一一插入到表单当中。
本发明还公开了一种基于多线程的网络爬虫系统的网页爬取方法,包括以下步骤:
S01:使用多线程搜索URL;
S02:对网页内容进行分块抓取,并将抓取的网页保存至暂存模块;
S03:对所读取的html信息进行解析,利用正则表达式处理,获取所有的处理信息数目,并且删除空白和特殊字符;将网页的信息以换行符为依据分隔形成列表项,将该列表项的长度作为序号;然后一一插入到表单当中;
S04:利用宽度优先搜索来进行遍历访问,以网页中某个超链接为初始点,不断访问从这个链接以后的超链接,该层超链接被访问完后,再依访问下一层的超链接;
S05:在存储文件时判断是否存在该文件,如果不存在,则直接爬取该文件;如果存在并且此次爬取网页所获得的内容比上一次爬取的多,则覆盖原来的文件;否则,丢弃该文件。
与现有技术相比,本发明的优点是:
1.本发明根据输入的网址,得到这个网址中所有URL格式信息,其中用到正则表达式,将URL的信息分离,得到需要的信息,然后再根据关键字信息,可以获取到所有关于关键字的所有分离字段信息。利用适合这个程序的高效算法,宽度优先搜索遍历,保存了待访问的网页链接列表,以及已经访问过的网页链接列表,放入文件当中。与此同时记录了访问每个网页链接所需要的时间以及编号,使得在有限的时间内访问到了最多的网页地址,并且在其中运用协程提高了并发的效率。
附图说明
下面结合附图及实施例对本发明作进一步描述:
图1为本发明基于多线程的网络爬虫系统的结构示意图;
图2为本发明基于多线程的网络爬虫系统的多线程爬去网页的示意图;
图3为本发明基于多线程的网络爬虫系统的运行流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
实施例:
如图1所示,一种基于多线程的基于多线程的网络爬虫系统,包括URL处理模块、网页爬取模块、网页分析模块和网页存储模块。
URL处理模块,通过URL类处理获得每个URL的主机名,端口号,文件名。
URL 的一般形式是:<URL的访问方式>://<主机>:<端口>/<路径>。在这个程序当中能使得变得简单,就设计了一存放URL的类,在这个类中包含了Host(主机名),Port(端口),File(文件路径),Fname(这个是给这个网页叫的名字)。下面的代码是 URL类的所有的成员和它的成员函数:
class URL
{
public:
URL() {}
void SetHost(const string& host) { Host = host; }
string GetHost() { return Host; }
void SetPort(int port) { Port = port; }
int GetPort() { return Port; }
void SetFile(const string& file) { File = file; }
string GetFile() { return File; }
void SetFname(const string& fname) { Fname = fname; }
string GetFname() { return Fname; }
~URL() {}
private:
string Host;
int Port;
string File;
string Fname;
};
对URL的处理:
除此之外,在我们看到的网页源代码中,统一资源定位符URL有的时候是绝对路径,有的时候却是相对路径,当然还有其他的情况,还有一些URL中会有一些特殊字符,像‘#’,多个‘///’等等。
所以,应该将这些URL进行特别的处理,最终可以获得每个URL的主机名,端口号,文件名。因此需要对URL的特殊处理如下:
a) 其中URL的文件成员在最后不能是‘/’,如果有最后应该是‘\0’;如果这个文件成员真的没有路径,那么应该让路径变成‘/’。这样可以让URL排重变得更加简单。
b) 如果在URL的文件成员中包含‘#’这样的的特殊字符,那么就可以把这个字符前面的所有当做File,而从这个字符到以后所有的字符删掉。
c) 如果在URL中没有很明显的表示端口号,那么就要指定Port成员的值为80。
d) 如果URL没有host的属性,那么就把Host成员的值默认为初始URL的主机名。
网页爬取模块,对网页内容进行分块抓取,并将抓取的网页保存至暂存模块。
在能够进行分析网页的前面,首先要进行的是网页的抓取,并且要进行分析,再需要将数据从服务器下载下来然后把它保存到本地。
第一部分:在分析之前,在读取数据信息的时候,在最开始的一部分信息是和网页本身无关的,就像某些网页没有被找到的时候,就会得到404 not found等这样的产生的服务信息,这像这样的信息一样,每一种情况就会得到相关联的数据信息,所以,对照着某些服务的信息,就不应该这样被记录。应该从‘>’这个字符开始读取时,才算真正地开始可以获得在网页中的内容。
第二部分:定义一个名字叫tmp的字符数组,它的作用是暂时存放网页,这些网页是被抓取的,它的爬取的办法与第一部分所提到的大概一致,全部都是采用read函数,不一样的地方的是这里是一大块一大块的爬取,从效率的角度来看,这样可以每一次抓取一个字节的情况效率要高。在下一步要分析网页的时候,在这里面有一个统一资源定位符重定向的阶段,所以程序还会去继续修正这个名字为tmp的数组。假设是把这些爬取的网页直接保存到文件的话,那么还需要再次打开文件的时候进行网页分析,这样很容易降低运行效率,因为在磁盘中执行读写操作命令永远都是比在内存中读写慢得很多很多。
网页分析模块,提取URL,对URL进行重定向,对URL进行判重处理,删除重复的URL。
a) URL提取
在网页当中,所有链接的形式是这样的:<a herf=”sss”>title</a>,因此本阀门根据string类将自己封装的find函数,用于找到链接形式当中每一个”herf”所在的位置,把它分为三种情况。第一种情况是:URL可以表示为双引号勾选起来的情况;第二种情况是:URL可以表示为单引号勾选起来的情况;第三种情况是:URL可以表示为没有被引号勾选起来的情况。在这里需要使用了一个变量(flag)来标记,以此来区分以上的三种情况。
b) URL的重定向
在这以前,网络爬虫已经爬取了一些网页将它们存储在了文件夹中,这个文件夹的名字为Pages,而且在这里面的每一个网页都做了了重命名的处理。所以不管从路径上来说,还是文件名上,存储在本地的URL都和原本的网页中的链接都不是一一对应的,要想产生和原来一样进行网页跳转的效果,必须重新修正每一个链接的herf值。
针对一开始的网页链接<a herf=”sss.html”>title</a>,假设现在把这个链接网页重新命名为new.html,可以采用覆盖或者移动的办法转变成新的链接,使得两个引号中直接的内容为new.html。在本文采用的办法如下:
现在已经知道第一个引号的位置在pos_1,所以可以采用调用string类的insert方法来达到这样的目的。调用后产生的效果如下:
<a herf=”new.html””xxx.html”>title</a>
经过这样的处理,它不只是隐藏了”xxx.html”,也同样可以减少删除原本一些不必要的链接等操作的错误可能,在某种情况下反而可以提升代码的效率。
c) URL判重
存储在这个等待抓取的队列里的URL不断增多,而且里面的URL有很多是重复的。使用set的容器被提供(或者可以使用hash函数来进行判重)。
set是一种关联容器,在这里面存放的元素每一个都是不一样的,在这里面的每一个元素都叫做关键字,它的实现的依据是二叉搜索树。
因为它的元素是单一的,并且性能很高,所以把它选择作为URL判重的一种方法,同样这也是一种hash的工具。本文代码如下:
定义:set<unsigned int>Set;
使用:Set.insert(hashVal);
网页存储模块,在存储文件时判断是否存在该文件,如果不存在,则直接爬取该文件;如果存在并且此次爬取网页所获得的内容比上一次爬取的多,则覆盖原来的文件;否则,丢弃该文件。代码如下:
chdir("Pages");
int fd = open(url_t.GetFname().c_str(), O_CREAT|O_EXCL|O_RDWR,00770);
/* check whether needs re-fetch */
if(fd < 0) {
if(errno == EEXIST) {
stat(url_t.GetFname().c_str(), &buf);
int len = buf.st_size;
if(len >= flen) goto NEXT;
else {
fd = open(url_t.GetFname().c_str(), O_RDWR|O_TRUNC, 00770);
if(fd < 0) {
perror("file open error");
goto NEXT;
}
}
}
else {
perror("file open error");
goto NEXT;
}
}
write(fd, HtmFile.c_str(), HtmFile.length());
NEXT:
close(fd);
// todo next
上面的所有文件操作的代码是将已经被抓取网页的内容保存到文件当中。其中受到网络条件的限制,网络爬虫在爬取的过程中请求网页会超时,或者爬取获得的网页内容不全面,所以使得爬取的网页内容能够得到完善,可以不断地反复进行爬取。
在第一行代码当中,使用了O_CREAT | O_EXCL | O_RDWR这三种模式打开文件,当该文件已经存在的时候它会返回值-1,碰到错误的代码就会存放在error当中,显示错误的提示编号是EEXIST。
在代码中有stat这个函数,它是用来获取把文件名作为参数的文件的信息,在这里面的st_size的这个成员的内容对我们来说很重要,文件的大小以字节来表示。这样这个成员内容就可以参照当前爬取网页的大小,从而进行比较,以此为依据,来判断是否有必要将原来的文件进行覆盖操作。
在QT当中有两个类可以用来进行网络通信编程,是QNetworkAccessManager类和QNetworkReply类。
a) 在mainwindow.h中我们可以添加代码:
添加头文件:#include<QtNetwork>
增加私有成员的变量:QNetworkAccessManager *manager;
私有槽函数 private slots 中:void replyFinished(QNetworkReply *);
b) 在mainwindow.cpp中添加代码
getHtml用于发送请求,获取网页
void MainWindow::getHtml(QString baseUrl)
{
QNetworkAccessManager *manager;
QString html;
manager = new QNetworkAccessManager(this);
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl(baseUrl)));
}
接着定义函数:
void MainWindow::replyFinished(QNetworkReply *reply)
{
QTextCodec *codec = QTextCodec::codecForName("utf8");
QString all = codec->toUnicode(reply->readAll());
reply->deleteLater(); //最后要释放reply对象
parseHtml(all);
}
通过HTTP协议来下载网页的代码。其中QNetworkAccessManager这个类可以得到发送网络请求,并且能够接收回复的效果,在QNetworkAccessManager中有两个类,QNetworkRequest类可以实现管理请求的效果,而QNetworkReply类进行实现接收回复,以及处理数据的效果。
用这个代码发送请求 manager->get(QNetworkRequest(QUrl(baseUrl)));
通过这个语句它得到了一个QNetworkReply的对象,只要请求发送成功,它就会下载数据,当数据下载成功以后,这个manager就会产生一种信号,叫finished()信号,这里使用到了信号与槽机制,将finished()信号与replyFinished()函数关联,当所需要的数据都被下载完成的时候,就立刻运行一个函数,叫做replyFinished()函数。然后在replyFinished()函数中处理接收到的数据:
QTextCodec *codec = QTextCodec::codecForName("utf8");
QString all = codec->toUnicode(reply->readAll());
reply->deleteLater();
在获取到URL后点击按钮所产生的响应功能,其中包含URL的验证判断,以及URL是不是以HTTP开头的判断,都是利用到正则表达式,按照一个已知的字符串模式去匹配获取的字符串,然后实现获取URL所指的网页内容。具体步骤如下:
a) 首先根据文本的输入框输入的网址进行验证判断,如果网址为空或者长度为0,则输出错误提示信息,利用QMessageBox输出提示信息。
b) 否则再进一步进行判断,这里利用正则表达式,验证是否是以http为协议的网址,如果不匹配,那么便同样输出错误提示信息。
c) 若匹配,那么可以使用gethtml()函数,请求获取网页内容。
正则表达式是一种按照一个已知的字符串模式去匹配获取的字符串的操作。在QT中有QRegExp类来完成验证文本的有效性、数据的提取和数据的替换功能。
可以利用QRegExp::exactMatch这个函数来甄别输入的网址能否满足pattern,是否是http开头的。代码实现如下:
void MainWindow::on_Button_Search_Url_clicked()
{
QString baseUrl = uui->TextsInputs_Urls->text();
QString pattern("http://.*");
QRegExp regex(pattern);
bool match;
if (NULL == baseUrl || baseUrl.length() == 0)
{
QMessageBox::information(this,"Information",tr("Please input thebase website url first!"));
}
else
{
match = regex.exactMatch(baseUrl);
if (!match)
QMessageBox::information(this is,"Information",tr("请输入一个有效的网站地址!"));
else
{
getHtml(baseUrl);
}
}
}
关键字匹配查找模块是对所输入的文本进行验证,然后将符合文本要求的信息输出到QTableWidget中的item中,每一个符合要求的信息都存放进itemList列表中,并且进行一一对应,按照序号递增。
实现步骤如下:
a) 首先对输入的文本进行判空操作,若是,则输出错误提示信息。
b) 否则,对界面中的表格布局中的内容清空
c) 在 QTableWidget中立即新建QTableWidgetItem,存放所需要的信息项。
d) 对itemList数组中每个信息项进行对文本中是否包含的判断,然后存放进界面的表格布局的布局项中,并且将序号递增。实现代码如下:
void MainWindow::on_Button_Search_Text_clicked()
{
QString searchText = ui->TextInput_Search->text();
if (NULL == searchText || searchText.length() == 0)
{
QMessageBox::information(this,"Information",tr("Please input searchtext first!"));
}
else
{
ui->Table_Results1->clear();
int index = 0;
for(int i = 0;i < itemNumber; i++)
{
if(itemList[i].contains(searchText111))
ui->Table_Result->setItem(index++,0,new QTableWidgetItem(itemList[i]));
else
continue;
}
QMessageBox::information(this is,"Information","we totally found " +QStrings("%%1").args(index) + " itemss");
}
}
网页分析模块的功能对所读取的html信息进行解析,同样也用到了正则表达式,经过正则表达式的处理之后,获取所有的处理信息数目,并且将这些信息除去空白的东西,然后一一插入到表单当中。
实现步骤如下:
a) 将网页中的特殊字符删除,包括空格,标签;
b) 将网页的信息以换行符为依据分隔形成列表项,这个列表项的长度也就成为了序号。
c) 用QMessageBox输出具体的数量信息。
d) 最后将列表项一一存储到表单内容当中。
e) 若是空白信息,则删除此条记录,并且此序号取出,否则将此列表项添加到表单当中。实现代码如下:
void MainWindow::parseHtml(QString html)
{
html.replace("\t","");
html.replace(" ","");
html.replace(" ","");//网页当中的空格去除
html.replace("<*./>","");
html.replace("</.*>","");
itemList = html.split("\n");
itemNumber = itemList.length();
QMessageBox::information(this is,"Information","we totally found " +QStrings("%%1").args(itemNumber2) + " itemss");
for(int i = 0;i < itemNumber; i++) {
if(itemList[i] == NULL){
itemList.removeAt(i);
itemNumber--;
continue; }}
对爬取的网页内容进行分析:
a) 静态网页的抓取内容分析:
网络爬虫从主网页的URL开始,取得起始网页上的种子URL,接着在网页被爬取的过程中,在队列当中不停地放入在该网页上抓到的新的链接标识符,直到相应的条件被满足就可以停止爬取。
b) 动态网页的抓取内容分析:
分析动态网页某些参数,按照一定的准则,将被抓到的内容URL可以选出来然后进行拼接,只需要抓取用户所需要的动态网页。
c) 特殊内容的抓取内容分析:
情况特殊的时候,需要特别对待。例如所有购物网站的新品介绍信息页面,爬虫需要不断地去查看这种网页,快速发现有新的商品信息出现就要立刻进行抓取此类信息。
d) 文件对象的抓取内容分析:
需要爬取像图片,音频、动画、视频等文件格式的东西,仍然需要进行特别对待。比如说:如果需要爬取图片,那么我们首先知道它的后缀名,它的尺寸,以及像素,此外还需要知道把它转换出来所得到的缩小图。
如图2、3所示,网络爬虫系统的网页爬取方法,包括以下步骤:
S01:使用多线程搜索URL;
S02:对网页内容进行分块抓取,并将抓取的网页保存至暂存模块;
S03:对所读取的html信息进行解析,利用正则表达式处理,获取所有的处理信息数目,并且删除空白和特殊字符;将网页的信息以换行符为依据分隔形成列表项,将该列表项的长度作为序号;然后一一插入到表单当中;
S04:利用宽度优先搜索来进行遍历访问,以网页中某个超链接为初始点,不断访问从这个链接以后的超链接,该层超链接被访问完后,再依访问下一层的超链接;
S05:在存储文件时判断是否存在该文件,如果不存在,则直接爬取该文件;如果存在并且此次爬取网页所获得的内容比上一次爬取的多,则覆盖原来的文件;否则,丢弃该文件。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
Claims (5)
1.一种基于多线程的基于多线程的网络爬虫系统,其特征在于,包括URL处理模块、网页爬取模块、网页分析模块和网页存储模块;
所述URL处理模块,通过URL类处理获得每个URL的主机名,端口号,文件名;
所述网页爬取模块,对网页内容进行分块抓取,并将抓取的网页保存至暂存模块;
所述网页分析模块,提取URL,对URL进行重定向,对URL进行判重处理,删除重复的URL;
所述网页存储模块,在存储文件时判断是否存在该文件,如果不存在,则直接爬取该文件;如果存在并且此次爬取网页所获得的内容比上一次爬取的多,则覆盖原来的文件;否则,丢弃该文件;
还包括关键字匹配查找模块,用于对输入的文本进行验证,对符合要求的信息存储于列表中,并且进行一一对应,按照序号递增;根据列表中每个信息项对文本中作是否包含的判断,若包含则将文本存放进界面的表格布局的布局项中,并且将序号递增;
利用信号与插槽机制,在对象间建立通信,通过正则表达式匹配网址,产生发送获取网页的请求信号,然后根据该请求信号触发槽函数,获取所匹配的东西,得到包含关键字的具体信息。
2.根据权利要求1所述的基于多线程的网络爬虫系统,其特征在于,所述URL处理模块处理包括如下步骤:
a) URL的文件成员在最后以‘\0’结尾;若该文件成员没有路径,将路径变成‘/’;
b) 若在URL的文件成员中包含特殊字符,将该特殊字符之前的所有字符作为文件,将该特殊字符之后的所有字符删除;
c) 如果在URL中没有表示端口号,则将端口成员的值设置为80;
d) 如果URL没有主机名的属性,则将主机名成员的值默认为初始URL的主机名。
3.根据权利要求1所述的基于多线程的网络爬虫系统,其特征在于,所述网页分析模块在获取到URL后利用正则表达式对URL进行验证判断,包括以下步骤:
(1)首先根据文本的输入框输入的网址进行验证判断,如果网址为空或者长度为0,则输出错误提示信息,利用QMessageBox输出提示信息;
(2)利用正则表达式验证是否是以http为协议的网址,如果不匹配,输出错误提示信息;若匹配,则请求获取网页内容;所述正则表达式为按照一个已知的字符串模式去匹配获取的字符串。
4.根据权利要求1所述的基于多线程的网络爬虫系统,其特征在于,所述网页分析模块对所读取的html信息进行解析,利用正则表达式处理,获取所有的处理信息数目,并且删除空白和特殊字符;将网页的信息以换行符为依据分隔形成列表项,将该列表项的长度作为序号;然后一一插入到表单当中。
5.一种基于多线程的网络爬虫系统的网页爬取方法,其特征在于,包括以下步骤:
S01:使用多线程搜索URL;
S02:对网页内容进行分块抓取,并将抓取的网页保存至暂存模块;
S03:对所读取的html信息进行解析,利用正则表达式处理,获取所有的处理信息数目,并且删除空白和特殊字符;将网页的信息以换行符为依据分隔形成列表项,将该列表项的长度作为序号;然后一一插入到表单当中;通过关键字匹配查找模块对输入的文本进行验证,对符合要求的信息存储于列表中,并且进行一一对应,按照序号递增;根据列表中每个信息项对文本中作是否包含的判断,若包含则将文本存放进界面的表格布局的布局项中,并且将序号递增;利用信号与插槽机制,在对象间建立通信,通过正则表达式匹配网址,产生发送获取网页的请求信号,然后根据该请求信号触发槽函数,获取所匹配的东西,得到包含关键字的具体信息;
S04:利用宽度优先搜索来进行遍历访问,以网页中某个超链接为初始点,不断访问从这个链接以后的超链接,该层超链接被访问完后,再依访问下一层的超链接;
S05:在存储文件时判断是否存在该文件,如果不存在,则直接爬取该文件;如果存在并且此次爬取网页所获得的内容比上一次爬取的多,则覆盖原来的文件;否则,丢弃该文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510949494.2A CN105608134B (zh) | 2015-12-18 | 2015-12-18 | 一种基于多线程的网络爬虫系统及其网页爬取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510949494.2A CN105608134B (zh) | 2015-12-18 | 2015-12-18 | 一种基于多线程的网络爬虫系统及其网页爬取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105608134A CN105608134A (zh) | 2016-05-25 |
CN105608134B true CN105608134B (zh) | 2019-06-14 |
Family
ID=55988074
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510949494.2A Expired - Fee Related CN105608134B (zh) | 2015-12-18 | 2015-12-18 | 一种基于多线程的网络爬虫系统及其网页爬取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105608134B (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105938496A (zh) * | 2016-05-27 | 2016-09-14 | 深圳市永兴元科技有限公司 | 网页内容提取方法及装置 |
CN106776787A (zh) * | 2016-11-24 | 2017-05-31 | 山东浪潮云服务信息科技有限公司 | 一种对互联网数据进行采集的方法 |
CN108108376B (zh) * | 2016-11-25 | 2021-07-09 | 中标软件有限公司 | 一种线性自适应文件名长度调度系统及方法 |
CN110968821A (zh) * | 2018-09-30 | 2020-04-07 | 北京国双科技有限公司 | 一种网址处理方法及装置 |
CN109446461A (zh) * | 2018-10-29 | 2019-03-08 | 成都思维世纪科技有限责任公司 | 一种cdn及cache缓存不良信息内容审计的方法 |
CN110287428B (zh) * | 2019-06-27 | 2021-07-27 | 武汉思普崚技术有限公司 | 一种url数据挖掘方法及系统 |
CN110516135A (zh) * | 2019-08-29 | 2019-11-29 | 杭州时趣信息技术有限公司 | 一种爬虫系统及方法 |
CN110673968A (zh) * | 2019-09-26 | 2020-01-10 | 科大国创软件股份有限公司 | 一种基于令牌环的舆情监控目标保护方法 |
CN110798545B (zh) * | 2019-11-05 | 2020-08-18 | 中国人民解放军国防科技大学 | 一种基于Web的域名数据获取方法 |
CN110929128A (zh) * | 2019-12-11 | 2020-03-27 | 北京启迪区块链科技发展有限公司 | 一种数据爬取方法、装置、设备和介质 |
CN111651656B (zh) * | 2020-06-02 | 2023-02-24 | 重庆邮电大学 | 一种基于代工模式的动态网页爬虫方法及系统 |
CN111881335A (zh) * | 2020-07-28 | 2020-11-03 | 芯薇(上海)智能科技有限公司 | 一种基于爬虫技术的多任务处理系统及方法 |
CN111949851A (zh) * | 2020-08-14 | 2020-11-17 | 电子科技大学 | 一种解决js加密问题的爬虫方法 |
CN112328945A (zh) * | 2020-12-10 | 2021-02-05 | 青海民族大学 | 一种藏文网页的爬虫设计和网页净化方法和系统 |
CN112487268A (zh) * | 2020-12-14 | 2021-03-12 | 安徽经邦软件技术有限公司 | 一种基于分布式爬虫技术的数据爬取实现方法 |
CN113076459A (zh) * | 2021-04-27 | 2021-07-06 | 无锡星凝互动科技有限公司 | 一种基于ai咨询神经网络搭建方法及系统 |
CN113254749B (zh) * | 2021-06-10 | 2022-08-23 | 浪潮通用软件有限公司 | 一种基于http协议的数据爬取方法及装置 |
CN115858902B (zh) * | 2023-02-23 | 2023-05-09 | 巢湖学院 | 一种页面爬虫规则更新方法、系统、介质及设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101187925A (zh) * | 2006-11-17 | 2008-05-28 | 北京酷讯科技有限公司 | 自动优化爬虫的抓取方法 |
CN102254027A (zh) * | 2011-07-29 | 2011-11-23 | 四川长虹电器股份有限公司 | 批量获取网页内容的方法 |
CN103294732A (zh) * | 2012-03-05 | 2013-09-11 | 富士通株式会社 | 网页抓取方法及爬虫 |
CN104866517A (zh) * | 2014-12-30 | 2015-08-26 | 智慧城市信息技术有限公司 | 一种抓取网页内容的方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120059658A1 (en) * | 2010-09-08 | 2012-03-08 | Nuance Communications, Inc. | Methods and apparatus for performing an internet search |
-
2015
- 2015-12-18 CN CN201510949494.2A patent/CN105608134B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101187925A (zh) * | 2006-11-17 | 2008-05-28 | 北京酷讯科技有限公司 | 自动优化爬虫的抓取方法 |
CN102254027A (zh) * | 2011-07-29 | 2011-11-23 | 四川长虹电器股份有限公司 | 批量获取网页内容的方法 |
CN103294732A (zh) * | 2012-03-05 | 2013-09-11 | 富士通株式会社 | 网页抓取方法及爬虫 |
CN104866517A (zh) * | 2014-12-30 | 2015-08-26 | 智慧城市信息技术有限公司 | 一种抓取网页内容的方法及装置 |
Non-Patent Citations (2)
Title |
---|
"Web挖掘中信息采集技术研究与实现";何恒昌;《中国优秀硕士学位论文全文数据库 信息科技辑》;20100815;论文正文第3章、第4章 |
"支持AJAX的分布式爬虫系统的研究与实现";邬柏;《中国优秀硕士学位论文全文数据库 信息科技辑》;20140615;论文正文第3章 |
Also Published As
Publication number | Publication date |
---|---|
CN105608134A (zh) | 2016-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105608134B (zh) | 一种基于多线程的网络爬虫系统及其网页爬取方法 | |
Mitchell | Web scraping with Python: Collecting more data from the modern web | |
US8683311B2 (en) | Generating structured data objects from unstructured web pages | |
US9300755B2 (en) | System and method for determining information reliability | |
JP6488508B2 (ja) | ウェブページのアクセス方法、装置、デバイス及びプログラム | |
CN105094888B (zh) | 一种应用程序插件加载方法及装置 | |
CN103118007B (zh) | 一种用户访问行为的获取方法和系统 | |
CN106126648B (zh) | 一种基于重做日志的分布式商品信息爬虫方法 | |
CN110352427B (zh) | 用于收集与网络化环境中的欺诈性内容相关联的数据的系统和方法 | |
CN109376291B (zh) | 一种基于网络爬虫的网站指纹信息扫描的方法及装置 | |
CN102930059A (zh) | 一种聚焦爬虫的设计方法 | |
CN104391978B (zh) | 用于浏览器的网页收藏处理方法及装置 | |
US9454535B2 (en) | Topical mapping | |
CN111859076B (zh) | 数据爬取方法、装置、计算机设备及计算机可读存储介质 | |
CN101114284B (zh) | 一种显示网页内容相关信息的方法及系统 | |
CN108280102A (zh) | 上网行为记录方法、装置及用户终端 | |
US20160063111A1 (en) | Management of content tailoring by services | |
JP2005275488A (ja) | 入力支援方法およびプログラム | |
US9529911B2 (en) | Building of a web corpus with the help of a reference web crawl | |
CN101576933A (zh) | 基于标题分隔符的全自动web页面分组法 | |
KR101853388B1 (ko) | 소외 광고용 소셜 컨텍스트 | |
FR3092683A1 (fr) | Systèmes informatiques et procédés d’assistance au remplissage de formulaires en ligne | |
US11640438B1 (en) | Method and system for automated smart linking within web code | |
US8996470B1 (en) | System for ensuring the internal consistency of a fact repository | |
Saberi¹ et al. | What does the future of search engine optimization hold? |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220323 Address after: 225300 garage 403, building 3, Guangming garden, Luotang street, Jiangyan District, Taizhou City, Jiangsu Province Patentee after: Taizhou Dongsheng Computer Technology Co.,Ltd. Address before: 224051 middle road of hope Avenue, Yancheng City, Jiangsu Province, No. 1 Patentee before: YANCHENG INSTITUTE OF TECHNOLOGY |
|
TR01 | Transfer of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20190614 |
|
CF01 | Termination of patent right due to non-payment of annual fee |