利用Python****爬虫进行Web数据挖掘已经越来越普遍,网上的各种Python爬虫资料教程比较多,但是很少有人对Web数据挖掘进行系统地总结和分析。

从目标上来讲,Web数据挖掘分为三类。最常见的是对于网站内容的爬取,包括文本、图片和文件等;其次是对于网站结构的爬取,包括网站目录,链接之间的相互跳转关系,二级域名等;还有一种爬虫是对于Web应用数据的挖掘,包括获取网站CMS类型,Web插件等。

0x02 网站内容挖掘

网站内容挖掘应用最广,最为常见,网上的Python爬虫资料大多也都属于这类。爬取下的内容也可用于很多方面。

Python编写这类爬虫的常见思路就是利用request或urllib2库定制请求,利用BeautifulSoup对原始网页进行解析,定位特定html标签,寻找目标内容。如果要提高性能,可以利用threading启用多线程,gevent启用协程(在windows上使用可能会有些问题),也可以用multiprocessing启动多进程。multiprocessing能突破python的GIL[全局解释器锁]的限制。其他的一些技巧可以看我的另一篇博客:常见的反爬虫和应对方法?

0x03 网站结构挖掘

网站结构挖掘并不是很常见,但在一些特殊的应用场景,我们也会用到。例如对于Web[漏洞扫描器],爬取网站整站目录,获取二级域名是极为重要的。在第一类网站内容挖掘中,有时也需要将目标网站某个页面(通常是首页)作为入口,对整个网站所有内容进行获取和分析,这种情况下就需要对网站结构进行分析。

对于网站目录爬取,需要考虑的一个重要问题就是爬虫性能。通常网站的页面会比较多,如果直接获取所有目录,可能会耗费大量时间。另外,对于网站链接的搜索策略对爬虫的性能也会产生很大影响。一般情况下,我们会采用广度优先搜索,从入口页面开始,获取该页面内所有链接,并判断链接是否是站内链接,是否已经爬取过。为了提高速度,可以对链接进行归纳,将/page.php?id=1与/page.php?id=2认为是同一类型链接,不进行重复爬取。简单实现代码如下:

1 # coding=utf-8

2 ‘’’

3 爬取网站所有目录

4 Author: bsdr

5 Email: 1340447902@qq.com

6 ‘’’

7importurllib2

8importre

9fromBeautifulSoupimportBeautifulSoup

10importtime

11

12 t = time.time()

13

14 HOST = ‘’

15 CHECKED_URL = [] # 已检测的url规则

16 CHECKING_URL = [] # 待检测的url

17 RESULT = [] # 检测结果

18 RETRY = 3 # 重复尝试次数

19 TIMEOUT = 2 # 超时

20

21

22class****url_node:

23def****init(self, url):

24 ‘’’

25 url节点初始化

26 :param url: String, 当前url

27 :return:

28 ‘’’

29 # self.deep = deep

30 self.url = self.handle_url(url, is_next_url=False)

31 self.next_url = []

32 self.content = ‘’

33

34

35def****handle_url(self, url, is_next_url=True):

36 ‘’’

37 将所有url处理成标准格式

38

39 :param url: String

40 :param is_next_url: Bool, 判断传入的url是当前需要检测的url还是下一层url

41 :return: 返回空或错误信息或正确url

42 ‘’’

43globalCHECKED_URL

44globalCHECKING_URL

45

46 # 去掉结尾的’/‘

47 url = url[0:len(url) - 1]ifurl.endswith(’/’)elseurl

48

49ifurl.find(HOST) == -1:

50if****noturl.startswith(‘http’):

51 url = ‘http://’ + HOST + urlifurl.startswith(’/’)else’http://’ + HOST + ‘/’ + url

52else:

53 # 如果url的host不为当前host,返回空

54return

55else:

56if****noturl.startswith(‘http’):

57 url = ‘http://’ + url

58

59ifis_next_url:

60 # 下一层url放入待检测列表

61 CHECKING_URL.append(url)

62else:

63 # 对于当前需要检测的url

64 # 将其中的所有参数替换为1

65 # 然后加入url规则表

66 # 参数不同,类型相同的url,只检测一次

67 rule = re.compile(r’=.?&|=.?$’)

68 result = re.sub(rule, ‘=1&’, url)

69ifresultinCHECKED_URL:

70return’[!] Url has checked!’

71else:

72 CHECKED_URL.append(result)

73 RESULT.append(url)

74

75returnurl

76

77

78def****__is_connectable(self):

79 # 验证是否可以连接

80 retry = 3

81 timeout = 2

82foriinrange(RETRY):

83try:

84 response = urllib2.urlopen(self.url, timeout=TIMEOUT)

85return****True

86except:

87ifi == retry - 1:

88return****False

89

90

91def****get_next(self):

92 # 获取当前页面所有url

93 soup = BeautifulSoup(self.content)

94 next_urls = soup.findAll(‘a’)

95iflen(next_urls) != 0:

96forlinkinnext_urls:

97 self.handle_url(link.get(‘href’))

98

99

100def****run(self):

101ifself.url:

102printself.url

103ifself.__is_connectable():

104try:

105 self.content = urllib2.urlopen(self.url, timeout=TIMEOUT).read()

106 self.get_next()

107except:

108 print(’[!] Connect Failed’)

109

110

111class****Poc:

112def****run(self, url):

113globalHOST

114globalCHECKING_URL

115 url = check_url(url)

116

117if****noturl.find(‘https’):

118 HOST = url[8:]

119else:

120 HOST = url[7:]

121

122forurlinCHECKING_URL:

123 print(url)

124 url_node(url).run()

125

126

127def****check_url(url):

128 url = ‘http://’ + urlif****noturl.startswith(‘http’)elseurl

129 url = url[0:len(url) - 1]ifurl.endswith(’/’)elseurl

130

131foriinrange(RETRY):

132try:

133 response = urllib2.urlopen(url, timeout=TIMEOUT)

134returnurl

135except:

136raiseException(“Connect error”)

137

138

139ifname == ‘main’:

140 HOST = ‘www.hrbeu.edu.cn’

141 CHECKING_URL.append(‘http://www.hrbeu.edu.cn/’)

142forurlinCHECKING_URL:

143 print(url)

144 url_node(url).run()

145printRESULT

146print"URL num: "+str(len(RESULT))

147print"time: %d s" % (time.time() - t)

对于二级域名的获取,如果直接从主站爬取的链接中寻找,效率很低而且结果可能并不能让人满意。目前获取二级域名有三种常用方法,第一种是利用域名字典进行猜解,类似于暴力破解。最后,如果你的时间不是很紧张,并且又想快速的python提高,最重要的是不怕吃苦,建议你可以架尉♥信(同音):276 3177 065 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~
第二种种是利用各种二级域名查询接口进行查询,例如bing的查询接口如下,domain为根域名:

http://cn.bing.com/search?count=50&q=site:domain&first=1

link的二级域名查询接口为:

http

Python爬虫进行Web数据挖掘总结和分析 这是我见过最牛逼的教程相关推荐

  1. python websocket库有什么_常用Python爬虫与Web开发库有哪些?

    Python爬虫和Web开发均是与网页相关的知识技能,无论是自己搭建的网站还是爬虫爬去别人的网站,都离不开相应的Python库,以下是常用的Python爬虫与Web开发库. **1.爬虫库** bea ...

  2. Python爬虫项目之NBA球员可视化分析

    Python爬虫学习之NBA球员可视化分析 前言 最近刚上完Python选修课,一直挺喜欢Python的,觉得Python的简洁优美的代码像是在写诗一样让人看了赏心悦目,其次就是他强大的第三方库是其他 ...

  3. 【计算机专业毕设之基于python爬虫的汽车销量预测可视化分析系统-哔哩哔哩】 https://b23.tv/2gOjMVB

    [计算机专业毕设之基于python爬虫的汽车销量预测可视化分析系统-哔哩哔哩] https://b23.tv/2gOjMVB https://b23.tv/2gOjMVB

  4. python爬虫: 爬取拉勾网职位并分析

    文章目录 0. 前言 1. 用到的软件包 2. 解析网页 3. 数据清洗 4. 词云 5. 描述统计 6. 实证统计 7. 完整代码 7.1 爬虫部分的代码 7.2 数据分析部分的代码 0. 前言 本 ...

  5. 使用python爬虫对京东文胸销量简单分析

    为何会有这么一个想法呢?很久之前,在微信公众号中看到过一片文章,关于分析文胸cup和颜色的文章.许久过去了,大概都忘记了.前几天又正好找点时间学一下python的爬虫,于是乎就想找一个小项目练练手,就 ...

  6. python爬虫可视化web展示_基于Python爬虫的职位信息数据分析和可视化系统实现

    1. 引言 在这个新时代,人们根据现有的职位信息数据分析系统得到的职位信息越来越碎片化,面对收集到的大量的职位信息数据难以迅速地筛选出对自己最有帮助的职位信息,又或者筛选出信息后不能直观地看到数据的特 ...

  7. python爬虫网易云音乐评论再分析_爬取网易云音乐的评论后,竟有这种发现!

    原标题:爬取网易云音乐的评论后,竟有这种发现! 作者 | 志颖 责编 | 胡巍巍 用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条. 现在 ...

  8. Python爬虫基础面试题为2020年初大学生就业做准备(文末附教程)

    前言 之所以在这里写下python爬虫常见面试题及解答, 一是用作笔记,方便日后回忆: 二是给自己一个和大家交流的机会,互相学习.进步,希望不正之处大家能给予指正: 三是我也是互联网寒潮下岗的那批人之 ...

  9. Python爬虫股票评论,snowNLP简单分析股民用户情绪(草稿)

    一.背景     股民是网络用户的一大群体,他们的网络情绪在一定程度上反映了该股票的情况,也反映了股市市场的波动情况.作为一只时间充裕的研究僧,我课余时间准备写个小代码get一下股民的评论数据,分析以 ...

  10. python爬虫的一次尝试——华北电力大学图书馆读者荐购系统:基于python爬虫的web数据爬取

    华北电力大学图书馆读者荐购系统数据爬取 前言 本章工具 网页分析 1.荐购数据 2.书目具体信息 代码部分 1. 荐购数据爬取 2. 完整书目信息爬取 前言 本学期数据仓库与数据挖掘课程大作业是编程实 ...

最新文章

  1. DPDK加速I/O虚拟化
  2. php汉字转换拼音,PHP汉字转换拼音的函数代码
  3. 巧用词语角色:基于目标自适应图的跨目标立场检测
  4. SQL数据库高级查询命令(2)
  5. Redis与Memcache的区别
  6. logrotate 命令切换linux系统日志
  7. C++Debug Assertion Failed!到底出错在哪里?
  8. php汉字转拼音 字库型
  9. 0723电话面试整理
  10. ElasticSearch(十二):Spring Data ElasticSearch 的使用(二)
  11. Plotly基础教程
  12. layui upload 提示语
  13. das for gyb2.0新增特性说明
  14. 【开发随记】【提效】工作习惯那些事系列之三——邮件管理
  15. MHD-UH40RK4K高清视频会议摄像头
  16. Havok VS PhysX 漫谈物理加速世界!
  17. SAP-ABAP性能优化之构建嵌套结构的哈希表
  18. html转盘游戏,使用Javascript和CSS3实现一个转盘小游戏(实战篇)
  19. 基于多目标优化方法的电梯零部件预防性维修期决策
  20. java 两个日期的天数_计算Java 8中两个日期之间的天数

热门文章

  1. ERP原理及应用教程-第三章
  2. 金蝶未注册服务器win10,金蝶WIN10下异常问题解决方法
  3. java公寓报修管理系统_学生公寓报修管理系统.pdf
  4. 微信小程序搜索排名规则,教你怎么让排名靠前
  5. 电路串联和并联图解_电路串联和并联的区别有哪些
  6. Win11如何调整鼠标dpi?Win11调整鼠标dpi的方法
  7. 黑、白盒测试 和 动、静态测试
  8. 小程序学习:使用有赞UI组件
  9. Windows 域的简单说明
  10. Win10优化大师Windows 10 Manager v3.4.6.0 官方安装绿色版