网站内容更新策略(计算机学院大数据专业大三的设计需要考虑以下限制(一) )
优采云 发布时间: 2021-10-30 03:11网站内容更新策略(计算机学院大数据专业大三的设计需要考虑以下限制(一)
)
大家好,我不温柔,我是计算机学院大数据专业的大三学生。我的外号来自一个成语——不温柔,我要温柔的气质。博主作为互联网行业的新手,写博客一方面记录自己的学习过程,另一方面总结自己犯过的错误,希望能帮助到很多和他一样的年轻人婴儿期。不过由于水平有限,博客难免会出现一些错误。如有疏漏,希望大家多多指教!暂时只在csdn平台更新,博客主页:。
PS:随着越来越多的人未经本人同意直接爬到博主文章,博主特此声明:未经本人许可禁止转载!!!
内容二、网络爬虫初试三、抓取策略3.2、数据更新策略
一、 爬取策略
爬取策略是指在爬取过程中对从每个页面解析出的超链接进行排列的方法,即按照什么顺序爬取这些超链接。
1.1 爬取策略的设计需要考虑以下限制
(1)不要给web服务器太大压力
这些压力主要体现在:
①与Web服务器的连接需要占用其网络带宽
②每次页面请求都需要从硬盘读取文件
③对于动态页面,还需要执行脚本。如果开启了Session,大数据访问需要更多的内存消耗
(2)不要占用太多客户端资源
爬虫在与Web服务器建立网络连接时,也会消耗本地网络资源和计算资源。如果同时运行的线程过多,特别是存在一些长期连接,或者网络连接的超时参数设置不正确,很可能客户端可能会消耗有限的网络资源。
1.2 爬取策略设计的综合考虑
网站上不同的网页链接图毕竟有其独特的特点。因此,在设计爬虫策略时,需要进行一定的权衡,考虑各种影响因素,包括爬虫的网络连接消耗和对服务器的影响。影响等等,一个好的爬虫需要不断结合网页链接的一些特点进行优化和调整。
对于爬虫来说,爬取的初始页面一般都是比较重要的页面,比如某个公司的首页,新闻的首页网站等。
从爬虫管理多个页面超链接的效率来看,无论是基本的深度优先策略还是广度优先策略,效率都更高。
从页面优先级的角度来看,爬虫虽然使用指定的页面作为初始页面进行爬取,但在确定下一个要爬取的页面时,总是希望优先级高的页面先被爬取。
由于页面之间的链接结构非常复杂,可能存在双向链接、循环链接等。
爬虫在某个WEB服务器上爬取页面时,需要先建立网络连接,占用主机和连接资源,对这个资源占用进行适当的分配是非常有必要的。
二、先尝试网络爬虫
互联网中的网络相互连接,形成一个巨大的网络图:
网络爬虫来自这个庞大复杂的网络体,根据给定的策略,抓取需要的内容
import requests,re
# import time
# from collections import Counter
count = 20
r = re.compile(r'href=[\'"]?(http[^\'">]+)')
seed = 'https://www.baidu.com/more/'
queue = [seed]
used = set() # 设置一个集合,保存已经抓取过的URL
storage = {}
while len(queue) > 0 and count > 0 : try: url = queue.pop(0) html = requests.get(url).text storage = html #将已经抓取过的URL存入used集合中 used.add(url) new_urls = r.findall(html) # 将新发行未抓取的URL添加到queue中 print(url+"下的url数量为:"+str(len(new_urls))) for new_url in new_urls: if new_url not in used and new_url not in queue: queue.append(new_url) count -= 1 except Exception as e : print(url) print(e)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
我们可以感觉到从下一级网页到下一级网页可以有多少个链接
三、 爬取策略
从网络爬虫的角度来看,整个互联网可以分为:
3.1、数据爬取策略不完整PageRank策略OCIP策略大站优先策略合作爬取策略图遍历算法策略3.1.1、不完整PageRank策略策略
一般来说,网页的PageRank分数计算如下:
3.1.2、OPIC 策略
OPIC 是 Online Page Importance Computation 的缩写,是一种改进的 PageRank 算法
OPIC策略的基本思想
3.1.3、 大站优先策略(比较粗暴)
大站优先策略的思路简单明了:
“战争”通常具有以下特点:
如何识别目标网站是否是一场大战?
3.1.4、 合作爬取策略(需要标准化的URL地址)
为了提高抓取网页的速度,一个常见的选择是增加网络爬虫的数量
如何给这些爬虫分配不同的工作量,保证独立分工,避免重复爬取,这就是协同爬取策略的目标
协同爬取策略通常采用以下两种方法:
3.1.5、 图遍历算法策略(★)
图遍历算法主要分为两种:
1、深度优先
深度首先从根节点开始,沿着路径尽可能深地访问,直到遇到叶子节点才回溯
2、广度优先
使用广度优先策略的原因:
广度优先遍历策略的基本思想
广度优先策略从根节点开始,尽可能多地访问离根节点最近的节点
3、Python 实现
DFS 和 BFS 具有高度的对称性,所以在 Python 中实现时,不需要将两种数据结构分开,只需要构造一种数据结构
4、代码实现
import requests,re
count = 20
r = re.compile(r'href=[\'"]?(http[^\'">]+)')
seed = 'http://httpbin.org/'
queue = [seed]
storage = {}
while len(queue) > 0 and count > 0 : try: url = queue.pop(0) html = requests.get(url).text storage[url] = html #将已经抓取过的URL存入used集合中 used.add(url) new_urls = r.findall(html) # 将新发行未抓取的URL添加到queue中 print(url+"下的url数量为:"+str(len(new_urls))) for new_url in new_urls: if new_url not in used and new_url not in queue: queue.append(new_url) count -= 1 except Exception as e : print(url) print(e)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import requests,re
count = 20
r = re.compile(r'href=[\'"]?(http[^\'">]+)')
seed = 'http://httpbin.org/'
stack = [seed]
storage = {}
while len(stack) > 0 and count > 0 : try: url = stack.pop(-1) html = requests.get(url).text new_urls = r.findall(html) stack.extend(new_urls) print(url+"下的url数量为:"+str(len(new_urls))) storage[url] = len(new_urls) count -= 1 except Exception as e : print(url) print(e)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
BFS和DFS各有优势。DFS更容易陷入死循环,通常有价值的网页不会隐藏得太深,所以BFS通常是更好的选择。上面的代码使用列表来模拟堆栈或队列。Python中还有一个Queue模块,里面收录了LifoQueue和PriorityQueue,使用起来会更方便。
3.2、数据更新策略
常见的更新策略如下:
聚类策略的基本思想
美好的日子总是短暂的。虽然我还想继续和你谈谈,但这篇博文现在已经结束了。如果还不够,别着急,我们下篇文章见!
一本好书永远不会厌倦阅读一百遍。而如果我想成为全场最漂亮的男孩,我必须坚持通过学习获得更多的知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
如果我的博客对你有帮助,如果你喜欢我的博客内容,请一键“点赞”“评论”“[url=https://www.ucaiyun.com/]采集”!听说喜欢的人运气不会太差,每天都充满活力!如果你真的想当妓女,祝你天天开心,欢迎访问我的博客。
码字不易,大家的支持是我坚持下去的动力。喜欢后别忘了关注我哦!