初级爬虫学习资源
如果对符合下列条件的网站进行强行数据采集时,会具有法律风险。
- 采集的站点有声明禁止爬虫采集时。
- 网站通过Robots协议拒绝采集时。
所以为了避免面向监狱爬虫,我们需要了解Robots协议和robotparser模块(判断url是否可爬取)。
可爬取协议——Robots协议
- Robots.txt(统一小写)是一种存放于网站根目录下的文本文件
- 用来告告诉该协议对哪些爬虫生效,哪些网页可以被这些爬虫爬取,哪些不可以
- 该协议有三个属性:
- Uer-agent : 描述了对哪些爬虫有效
- Disallow : 描述了哪些网页不可爬
- Allow : 声明哪些网页可爬,比Disallow优先级高
案例:
User-agent: *
Disallow: /
Allow: /public/
该协议对所有爬虫有效,不允许抓取所有页面,但可以抓取 public 目录
User-agent: Baiduspider
Disallow:
允许百度爬虫抓取所有页面
User-agent: Baiduspider
Disallow: /
禁止百度爬虫爬取任何目录
User-agent: WebCrawler
Disallow:
User-agent: *
Disallow: /
只允许某一个爬虫访问
- 一些常见搜索爬虫的名称及其对应的网站
爬虫名称 | 名称 | 网站 |
---|---|---|
BaiduSpider | 百度 | www.baidu.com |
Googlebot | 谷歌 | www.google.com |
360Spider | 360 搜索 | www.so.com |
YodaoBot | 有道 | www.youdao.com |
Bingbot | 必应 | www.bing.com |
robotparser模块
-
该模块提供了RobotFileParser类,这个类可以根据网站的 robots.txt 文件来判断一个爬虫是否有权限来爬取这个网页
-
RobotFileParser类的方法
- RobotFileParser(url):创建对象
url就是你要爬取的网站的robots.txt 链接
- set_url(url):设置引用robots.txt文件的 url
- read(): 读取url并将其提供给解析器
- can_fetch(User-Agent,url):返回User-Agent是否可以抓取这个 URL
- parse(lines):按照 robots.txt 的语法规则来分析lines(字符串类型)
- mtime方法:返回上次抓取和分析 robots.txt 的时间
用于定期检查以抓取最新的 robots.txt
- modified方法:将当前时间设置为上次抓取和分析 robots.txt 的时间
最后两个方法对于长时间分析和抓取的搜索爬虫很有帮助
案例
对于小白,会前四个就够了
from urllib.robotparser import RobotFileParser
#导入RobotFileParser类
url = 'https://www.python.org/robots.txt'
#python官网的robots.txt的url
#方法1:直接用url创造对象
robot = RobotFileParser(url)
#用url调用这个类的构造方法
#方法2:用无参构造函数创造对象,再用url调用对象的set_url
> 目的都是一样的,设置url
robot1 = RobotFileParser()
robot1.set_url(url)
#set_url方法: 设置url
#在设置url之后,一定要调用对象的read方法,不然can_fetch方法只会返回false
rpobot1.read()
#read方法: 读取 robots.txt 文件并进行分析
#can_fetch(User-Agent,url):返回User-Agent是否可以抓取这个 url
print(rpobot1.can_fetch('Baiduspider', url))