python网络爬虫与信息提取(四)Robots协议

Robots协议  实例一京东 实例二亚马逊

绪论 网络爬虫引发的问题

1、网络爬虫的尺寸

爬取网页 Requests库

爬取网站 Scrapy库

爬取全网 建立搜索引擎

2、网络爬虫引发的问题

1.服务器性能骚扰

2.法律风险

3.泄露隐私

3、网络爬虫的限制

来源审查:判断User-Agent进行限制

      检查来访HTTP协议头的User-Agent域,只响应浏览器或友好爬虫的访问

发布公告:

      告知所有爬虫网站的爬取策略,要求爬虫遵守。


一、Robots协议

Robots Exclusion Standard 网络爬虫排除标准

作用:网站告知网络爬虫哪些页面可以抓取,哪些不行。

形式:在网站根目录下的robots。txt文件

eg.京东的Robots协议  https://www.jd.com/robots.txt

User-agent: *               #不可以爬取/?开头的网页  等等……
Disallow: /?* 
Disallow: /pop/*.html 
Disallow: /pinpai/*.html?* 
User-agent: EtaoSpider      #以下四种spider为恶意爬虫,不可以爬任何网页
Disallow: / 
User-agent: HuihuiSpider 
Disallow: / 
User-agent: GwdangSpider 
Disallow: / 
User-agent: WochachaSpider 
Disallow: /

注:Robots协议基本语法      # 注释  *代表所有  /代表根目录

二、Robots协议的遵守方式

1.Robots协议的使用

网络爬虫:自动或人工识别robots.txt,再进行内容爬取。

约束性:Robots协议是建议但非约束性,可不遵守,但存在法律风险。

2.对Robots协议的理解

结合网络爬虫尺寸,尺寸越大,越要遵守,防范法律风险。

类人行为可不遵守,阅读频率小,一次浏览内容少,注意不可用于商业用途。

>>> r = requests.get("https://item.jd.com/6946605.html")
>>> r.status_code
200
>>> r.encoding
'gbk'
>>> r.text[:1000]   #取网页前1000个字符
'\n\n\n    \n    \n    【华为P20】华为 HUAWEI P20  AI智慧全面屏 6GB +64GB 亮黑色 全网通版 移动联通电信4G手机 双卡双待【行情 报价 价格 评测】-京东\n    \n    \n    \n    \n    \n    \n    \n        \n    \n    
>>> import requests
>>> url = "https://item.jd.com/6946605.html"
>>> try:
    r = requests.get(url)
    r.raise_for_status()           #此函数返回200不产生异常,否则产生异常
    r.encoding = r.apparent_encoding
    print(r.text[:1000])
except:
    print("爬取失败")
#上为网络爬虫代码框架
    



    
    
    【华为P20】华为 HUAWEI P20  AI智慧全面屏 6GB +64GB 亮黑色 全网通版 移动联通电信4G手机 双卡双待【行情 报价 价格 评测】-京东
    
    
    
    

实例二:亚马逊商品页

>>> r = requests.get("www.amazon.cn/gp/product/B01M8L5Z3Y")
>>> r.status_code
503
>>>r.encoding
'ISO-8859-1'
>>>r.encoding = r.apparent_encoding
>>>print(r.text)
#出现错误 由于API造成  检查head
>>>r.requests.headers
{'User-Agent': 'python-requests/2.18.4', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
#网站发现了python爬虫的request请求,并拒绝了,利用headers控制参数修改user-agent
>>> kv = {'user-agent':'Mozilla/5.0'}											      
>>> url = "https://www.amazon.cn/gp/product/B01M8L5Z3Y"										
>>> r = requests.get(url,headers = kv)											      
>>> r.status_code											      
200
>>> r.request.headers											      
{'user-agent': 'Mozilla/5.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
>>> r.text[:1000]
											      
'\n\n\n\n\n\n\n\n  \n  \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n    \n\n
                    
                    

你可能感兴趣的:(Python)