Python爬虫开发(二):整站爬虫与Web挖掘

本文介绍了Python爬虫的基本理论,包括遵循robots协议、爬虫原则,以及爬虫的实现步骤。讲解了如何通过深度优先搜索获取网站URL,并对网页元素进行处理,以提取信息并生成文档。后续将探讨数据存储、多线程及动态网页抓取等内容。
摘要由CSDN通过智能技术生成

0 介绍

在互联网这个复杂的环境中,搜索引擎本身的爬虫,出于个人目的的爬虫,商业爬虫肆意横行,肆意掠夺网上的或者公共或者私人的资源。显然数据的收集并不是为所欲为,有一些协议或者原则还是需要每一个人注意。本文主要介绍关于爬虫的一些理论和约定协议,然后相对完整完成一个爬虫的基本功能。

1 协议

一般情况下网站的根目录下存在着一个robots.txt的文件,用于告诉爬虫那些文件夹或者哪些文件是网站的拥有者或者管理员不希望被搜索引擎和爬虫浏览的,或者是不希望被非人类的东西查看的。但是不仅仅如此,在这个文件中,有时候还会指明sitemap的位置,爬虫可以直接寻找sitemap而不用费力去爬取网站,制作自己的sitemap。那么最好我们看个具体的例子吧,这样更有助于理解robots协议:

-----------------------以下时freebuf的robots.txt-------------
User-agent: *
Disallow: /*?*
Disallow: /trackback
Disallow: /wp-*/
Disallow: */comment-page-*
Disallow: /*?replytocom=*
Disallow: */trackback
Disallow: /?random
Disallow: */feed
Disallow: /*.css$
Disallow: /*.js$
Sitemap: http://www.freebuf.com/sitemap.txt

大家可以看到,这里指明了适用的User-agent头,指明了Disallow的目录,也指明了sitemap,然后我们在看一下sitemap中是什么:

b1.png

我们大致可以发现这些都是整个网站允许公开的内容,如果这个爬虫作者是对freebuf的文章感兴趣的话,大可不必从头到尾设计爬虫算法拿下整个网站的sitemap,这样直接浏览sitemap节省了大量的时间。 

2 原则

如果协议不存在的话,我们仍然不能为所欲为,上网随意搜索一下源于爬虫协议的官司,国内外都有。爬虫的协议规则建立在如下的基础上:

 

1.    搜索技术应该服务于人类,尊重信息提供者的意愿,并维护其隐私权;

2.    网站也有义务保护其使用者的个人信息和隐私不被侵犯。

 

简单来说,就是构建的爬虫以信息收集为目的是没错的,但是不能侵犯别人的隐私,比如你扫描并且进入了网站的robots中的disallow字段,你就可能涉及侵犯别人隐私的问题。当然作为一般人来讲,我们使用爬虫技术无非是学习,或者是搜集想要的信息,并没有想那么多的侵权,或者是商业的问题。

3 确立目标与分析过程

这里我提供一个爬虫诞生要经历的一般过程:

1. 确立需求在,sitemap中挑选出需要挖掘的页面;

2. 依次分析挑选出的页面;

3. 存储分析结果。

但是有时候问题就是,我们的目标网站没有提供sitemap,那么这就得麻烦我们自己去获取自己定制的sitemap。

目标:制作一个网站的sitemap:

分析:我们要完成这个过程,但是不存在现成sitemap,笔者建议大家把这个网站想象成一个图的结构,网站的url之间纵横交错,我们可以通过主页面进行深度优先或者广度优先搜索从而遍历整个网站拿到sitemap。显然我们发现,我们首先要做的第一步就是完整的获取整个页面的url。

但是我们首先得想清楚一个问题:我们获取到的url是应该是要限制域名的,如果爬虫从目标网站跳走了,也就意味着将无限陷入整个网络进行挖掘。这么庞大的数据量,我想不是一般人的电脑硬盘可以承受的吧!

那么我们的第一步就是编写代码去获取整个页面的url。其实这个例子在上一篇文章中已经讲到过。

4 动手

我们的第一个小目标就是获取当前页面所有的url:

首先必须说明的是,这个脚本并不具有普遍性(只针对freebuf.com),并且效率低下,可以优化的地方很多:只是为了方便,简单实现了功能,有兴趣的朋友可以任意重构达到高效优雅的目的

import urllib
from bs4 import BeautifulSoup
import re
 
def get_all_url(url):
   urls = []
   web = urllib.urlopen(url)
soup =BeautifulSoup(web.read())
#通过正则过滤合理的url(针对与freebuf.com来讲)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平静愉悦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值