Python爬虫进行Web数据挖掘总结和分析

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

0x01 Web数据挖掘类型

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

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

0x02 网站内容挖掘

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

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

这类爬虫资料实在太多,在这里不再赘述了。

在这里给大家推荐一个python系统学习q群:250933691有免费开发工具以及初学资料,(人工智能,数据分析,爬虫,机器学习,神经网络)每天有老师给大家免费授课,欢迎一起交流学习。

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 '''

  7 import urllib2

  8 import re

  9 from BeautifulSoup import BeautifulSoup

10 import time

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

22 class url_node:

23    def __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

35    def 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        '''

43        global CHECKED_URL

44        global CHECKING_URL

45

46        # 去掉结尾的’/‘

47        url = url[0:len(url) - 1] if url.endswith('/') else url

48

49        if url.find(HOST) == -1:

50            if not url.startswith('http'):

51                url = 'http://' + HOST + url if url.startswith('/') else 'http://' + HOST + '/' + url

52            else:

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

54                return

55        else:

56            if not url.startswith('http'):

57                url = 'http://' + url

58

59        if is_next_url:

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

61            CHECKING_URL.append(url)

62        else:

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

64         

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值