文章目录
python网络爬虫基础知识
1、目标
掌握定向网络数据爬取和网页解析的基本能力
the website is the API (将网站作为API获得自己想要的数据)
2、学习过程
(1)、requests库
自动爬取HTML页面,自动向网络提交请求
(2)、robots.txt
网络爬虫排除标准
(3)、Beaytiful Soup库
解析HTML界面和信息内容,
(4)、Projects实战项目
(5)、Re 正则表达式库
提取特定网络信息
(6)、Scrapy框架
网络爬虫原理介绍,中规模的,爬取速度更快的网络爬虫框架
3、python程序开发工具(IDE)的选择
文本工具类: IDLE(自带默认常用入门级编辑器)、Sublime Text(多种编程风格,适用于专业程序员)
集成工具类: Pycharm、Anaconda & Spyder(开源免费集成开发框架)、Wing(公司维护、收费、适合多人共同开发)、Visual Studio&PTVS、Eclipse(需要具备一定开发经验)、Canopy(收费,适合科学计算和数据分析领域)
4、Requests库
Requests库一共提供了七个常用方法,除了requests方法外,其他都是通过调用requests方法来实现的
(1)、get方法
r = requests.get("http://www.baidu.com")
#构造一个向服务器请求资源的Request对象,r是一个Response对象,该对象包含返回服务器的所有相关资源,爬虫返回的全部内容
requests.get(url,params=None,**kwargs)
#url:拟获取页面的url链接;params:url中的额外参数,可以是字典或者字节流格式,是可选的
import requests #调用Requests库
r = requests.get("http://www.baidu.com") #用get方法访问网页
print(r.status_code) #r.status_code检测HTTP请求的返回状态,如果状态码是200,则代表访问成功,404代表访问失败
print(type(r)) #检测r的类型
print(r.headers) #返回get请求获得页面的头部信息
r.encoding='utf-8'
print(r.text)
Response对象的五个属性:
r.status_code #首先用这个方法来检查响应状态
r.text: url对应的页面字符串形式,以下四个方法是返回不同形式的网页
r.encoding: 从HTTP的header中猜测的响应编码方式
r.apparent_encoding: 网页备选编码,从HTTP的内容中猜测的响应编码方式
r.content: url对应内容的二进制形式
(2)、Requests库的异常
request.ConnectionError: 网络连接错误异常,如DNS查询失败,拒绝连接等
requests.HTTPError: HTTP协议层面出现的异常
requests.URLRequired: URL缺失异常
requests.TooManyRedirects: 超过最大重定向次数,产生重定向异常,常针对于复杂链接的访问错误
requests.ConnectTimeout: 仅指连接远程服务器超时异常
requests.Timeout: 请求URL超时,产生超时异常
Response对象的一个方法是raise_for_status:如果HTTP请求的返回状态不是200,那么就会产生异常requests.HTTPError
5、爬取网页的通用代码框架
加粗样式
import requests
def getHTMLText(url)
try:
r = requests.get(url,timeout=30)
r.raise_for_status() #raise_for_status()可以有效判断网络连接状态,产生异常的话就用try except框架来捕获异常
r.encoding = r.apparent_encoding
return r.text
except:
return "产生异常"
if _name_ == "_main_":
url = "http://www.baidu.com"
print(getHTMLText())
这个框架可以使爬虫变得更稳定、有序、可靠
6、HTTP协议和Requests库的主要方法
Requests库的7个主要方法
requests.requests(): 构造一个请求,支持以下基本方法,以下方法均对应于HTTP的相关方法
requests.get(): 获取HTML网页的主要方法
requests.head(): 获取HTML网页头信息的主要方法
requests.post(): 向HTML提交POST请求的方法
requests.put(): 向HTML网页提交PUT请求的方法
requests.patch(): 向HTML网页提交局部修改请求
requests.delete(): 向HTML页面提交删除请求
HTTP协议: Hypertext Transfer Protocol,超文本传输协议,是一种基于“请求与响应”模式的,无状态(第一次请求与第二次请求之间无直接联系)的应用层协议。
HTTP采用url作为定位网络资源的标识。
url:是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。
url格式:http://host[:port][path]
host:合法的Internet主机域名或IP地址
port:端口号,缺省端口为80
path:请求资源的路径
HTTP协议对资源的管理操作方法:
GET:获取url位置的资源
HEAD:请求获取URL位置资源的头部信息,适用于资源很大时
POST:向url位置的资源后增加新的数据
PUT:向url位置存取一个资源,覆盖原url位置的资源
PATCH:请求局部更新url位置的资源,即改变该处资源的部分内容,节省网络带宽
DELETE:请求删除url位置存储的资源
7、网络爬虫引发的问题
小规模: 数据量小,爬取速度不敏感。Requests库(爬取网页,玩转网页)
中规模: 数据规模较大,爬取速度缓慢,Scrapy库(爬取网站,爬取系列网站)
大规模: 搜索引擎,爬取速度关键,定制开发(爬取全网)
爬虫带来的问题:
骚扰问题:受限于编写水平和目的,网络爬虫会为web服务器带来巨大的资源开销,对网站运营者来说带来骚扰。
法律风险:侵犯网站的知识产权。
隐私泄露:可能突破简单的访问控制,获得被保护数据而泄露个人隐私。
限制网络爬虫的方法:
来源审查: 检查来访HTTP协议头的User-Agent域,只响应浏览器或友好爬虫的访问。
发布公告: Robots协议,告知所有爬虫网站的爬取策略,要求爬虫遵守。
8、Robots协议
Robots Exclusion Standard:网络爬虫排除标准
作用:网站告知爬虫哪些页面可以抓取,哪些页面不行。
形式:在网站根目录下的robots.txt文件。
点击查看京东的robots协议
User-agent: * #对任何的网络爬虫都应该遵守如下协议
Disallow: /?* #任何爬虫都不允许访问以?开头的路径
Disallow: /pop/*.html #任何爬虫都不允许访问pop/*.html
Disallow: /pinpai/*.html?* #任何爬虫都不允许访问/pinpai/*.html?*
User-agent: EtaoSpider # EtaoSpider 、HuihuiSpider 、GwdangSpider 、WochachaSpider 这四个网络爬虫不允许爬取京东的任何网页
Disallow: / # /代表根目录
User-agent: HuihuiSpider
Disallow: /
User-agent: GwdangSpider
Disallow: /
User-agent: WochachaSpider
Disallow: /
robots协议的基本语法:
User-agent: *
Disallow: /
如果一个网站没有robots协议,那么就默认允许可以爬取所有页面。
Robots协议的使用:
网络爬虫:自动或人工识别robots.txt,再进行内容爬取。
约束性:Robots协议是建议但非约束性,网络爬虫可以不遵循,但存在法律风险。
类人行为可以不遵守Robots协议。