Python网络爬虫与信息提取(二):网络爬虫之规则
Requests库的7个主要方法
Requests库的get()方法
获得一个网页最简单的一行代码就是 r = requests.get(url)
网络爬虫的尺寸
网络爬虫带来的问题
骚扰问题
对于一个网站来讲,网络爬虫就像骚扰电话一样,可以对这个网站带来很致命的骚扰功能
网络爬虫的法律风险
服务器上的数据有产权归属
网络爬虫获取数据后牟利将带来法律风险
曾经有法院判处网络爬虫赔偿服务器网站巨额费用
网络爬虫泄露隐私
网络爬虫可能具备突破简单访问控制的能力,获得被保护数据从而泄露个人隐私
网络爬虫的限制
在实际的使用中一些较大的网站都对网络爬虫有相关的限制。在整个Internet上,也将网络爬虫作为一个可规范的功能来看待
对于一般的服务器来讲,可以用2种方式限制网络爬虫:来源审查和发布公告
来源审查
如果服务器/网站的所有者有一定的技术能力,可以通过来源审查来限制网络爬虫
在进行浏览器访问的时候,不论是浏览器还是访问的软件,都会把它自己设定一个标识,放在User-Agent里。对网站服务器,它判断你HTT[的协议头,如果的User-Agent字段,不是预定的浏览器,那很可能就是一个爬虫
发布公告
像一个告示牌,告诉所有的爬虫,网站上哪部分内容你可以爬取,那部分你不可以爬取。
但是是否遵守就要由网络爬虫自身来决定了
Robots协议
robots协议一定是放在网站的根目录下,并不是所有的网站都有robots协议(如教育部的网站),没有robots协议的网站默认允许所有爬虫无限制地爬取其页面内容
Requests库网络爬虫实战
①京东页面商品的爬取
爬取页面:https://item.jd.com/2967929.html (一款手机)
状态码是200,说明返回的信息正确,并且获得了这个链接相应的内容
编码是gdk,说明从http的头部分已经可以解析出这个页面的编码信息,说明京东的网站提供了页面信息的相关编码。
import requests url = 'https://item.jd.com/2967929.html' try: r = requests.get(url) r.raise_for_status() r.encoding = r.apparent_encoding print(r.text[:1000]) except: print('爬取失败')
raise_for_status()函数在返回的代码如果是200的情况下是不产生异常的,否则会产生异常。
捕捉异常可以使用try/except语句。
- try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
- 如果你不想在异常发生时结束你的程序,只需在try里捕获它。
②亚马逊商品页面的爬取
爬取页面:https://www.amazon.cn/gp/product/B01M8L5Z3Y