一、Request库入门
1、Requests库的7个主要方法:
requests.request()
:构造一个请求,支撑以下各方法的基础方requests.get()
:获取HTML网页的主要方法
,对应于HTTP的GETrequests.head()
:获取HTML网页头信息
的方法,对应于http的headrequests.post()
:向HTML网页提交POST请求
的方法,对应于http的postrequests.put()
:向HTML网页提交PUT
请求的方法requests.patch()
:向HTML网页提交局部修改请求
- requests.delete()
:向HTML网页
提交删除请求`
2、requests.get()方法
r = requests.get(url)
Response对象的属性:
r.status_code
:http请求的返回状态,200表示连接成功,404表示失r.text
:http响应内容的字符串形式,即url对应的页面内容r.encoding
:从HTTP header中猜测
的响应内容编码方r.apparent_encoding
:从内容中分析
出响应内容编码方式(备选编码方式)r.content
:http响应内容的二进制形式
3、使用get
方法获取网络资源的基本流程:
使用r.status_code
查看状态码,若是200,则继续用r.text、r.encoding、r.apparent_encoding、r.content
去解析内容;若是404或其他,说明出错或产生异常
4、Requests库的异常
requests.ConnectionError
:网络连接 错误异常,如DNS查询失败,拒绝连接等requests.HTTPError
:HTTP错误异常requests.URLRequired
:URL缺失异常requests.TooManyRedirects
:超过最大重定向次数,产生重定向异常requests.ConnectTimeout
:连接远程服务器时超时异常requests.Timeout
:请求URL超时,产生超时异常
通用代码框架
import requests
def getHTMLTest(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status() # 如果状态不是200,引发HTTPError异常
r.encoding = r.apparent_encoding
return r.text
except:
return "产生异常"
if __name__ == "__main__":
url = "http://www.baidu.com"
print(getHTMLTest(url))
5、HTTP协议
-
HTTP是一个基于“请求与响应”模式的、无状态的
应用层协议
。- 请求与响应模式:用户发起请求,服务器做出相关响应
- 无状态:第一次请求和第二次请求之间并没有相关的关联
-
HTTP协议采用URL作为定位网络资源的标识。
URL格式http://host[:port][path]
host:合法的Internet主机域名或IP地址
port:端口号,缺省端口为80
path:请求资源的路径
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源
6、requests.requesst()方法解析
requests.request(method, url, **kwargs)
- method:请求方式,对应get/put/post等7种
- url:拟获取页面的链接
二、网络爬虫引发的问题
1、网络爬虫的限制
- 来源审查:判断
User-Agent
进行限制
检查来访HTTP协议头的User-Agent域,只响应浏览器或友好爬虫的访问。 - 发布公告:Robots协议
告知所有爬虫网站的爬取策略,要求爬虫遵守。
2、Robots协议
- 形式:在网站根目录Robots.txt文件
- 约束性:Robots协议是建议但非约束性,网络爬虫可以不遵守,但存在法律风险
- 类人行为可不参考Robots协议
Scrapy爬虫框架
1、spider
- 解析Downloader返回的响应(Response)
- 产生爬取项(scraped item)
- 产生额外的爬取请求(Request)
需要用户编写配置代码
2、Item Piplines
- 以流水线方式处理Spider产生的爬取项
- 由一组操作顺序组成的,类似流水线,每个操作是一个Item Pipline类型
- 可能操作包括:清理、检验和查重爬取项中的HTML数据、将数据存储到数据库
需呀用户编写配置代码
3、Scrapy常用命令
- *
scrapy startprojecct <name> [dir]
:创建一个新工程【常用】 - *
scrapy genspider [options] <name> <domain>
:创建一个爬虫【常用】 scrapy settings [options]
:获取爬虫配置信息- *
scrapy crawl <spider>:
运行一个爬虫【常用】 scrapy list
:列出工程中所有爬虫scrapy shell [url]
:启动URL调试命令行
4、产生一个scrapy
爬虫框架操作步骤
- 建立一个
Scrapy
爬虫工程 - 在工程中产生一个Scrapy爬虫
- 配置产生的spider爬虫
- 运行爬虫,获取网页
5、yield关键字
- 包含
yield
语句的函数是一个生成器 - 生成器是一个不断产生值的函数
- 生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值