python 爬虫学习笔记(一)
学习视频:
【Python网络爬虫与信息提取】.MOOC. 北京理工大学
- get()方法
request.get(url,params=None,**kwargs)
url: 拟获取页面的url链接
params: url中的额外参数,字典或字节流格式,可选
**kwargs: 12个控制访问参数
- Response对象的属性
属性 | 说明 |
---|---|
r.status_code | HTTP请求的返回状态 |
r.text | HTTP响应内容的字符串形式 |
r.encoding | 从HTTP header中猜测的响应内容编码方式 |
r.apparent_encoding | 从内容中分析出的响应内容编码方式 |
r.content | HTTP响应内容的二进制形式 |
r.encoding: 如果header中不存在charset,则认为编码为ISO-8859-1
r.apparent_encoding: 根据网页内容分析出的编码方式
例:
import requests
url = "http://www.baidu.com"
r = requests.get(url)
print(r.status_code) //为200即可继续
-
Requests的异常
异常 说明 requests.ConnectionError 网络连接错误异常 requests.HTTPError HTTP错误异常 requests.URLRequired URL缺失异常 requests.TooManyRedirects 超过最大重定向次数,产生重定向异常 requests.ConnectTimeout 连接远程服务器超时异常 requests.Timeout 请求URL超时,产生超时异常 -
Requests库异常
异常 说明 r.aise_for_status() 如果不是200,产生异常requests.HTTPError -
爬取网页通用代码
import requests
def getHTMLText(url):
try:
r = requests.get(url,timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return "产生异常"
if __name__ == "__main__":
url = "http://www.baidu.com"
print(getHTMLText(url))
-
HTTP协议
URL格式
http://host[:port][path]
host : 合法的Internet主机域名或IP地址
port : 端口号,缺省端口为80
path : 请求资源路径
例:
http://www.baidu.com
-
HTTP协议对资源的操作
方法 | 说明 |
---|---|
GET | 请求URL位置的资源 |
HEAD | 请求URL位置资源响应报告,即获得该资源头部信息 |
POST | 请求URL位置资源后附加新的数据 |
PUT | 请求URL位置存储一个资源,覆盖原URL位置 |
PATCH | 请求局部更新URL位置资源 |
DELETE | 请求删除URL位置存储的资源 |
PATCH : 仅向URL提交UserName的局部更新请求
PUT : 必须提交所有20个字段到URL,未提交字段被删除
- HTTP协议与Request库
Requests库方法 | 功能一致性 | 说明 | 对应的HTTP协议方法 |
---|---|---|---|
requests.request() | / | 构造一个请求,支撑以下方法 | / |
requests.get() | 一致 | 获取HTML网页的主要方法 | GET |
requests.head() | 一致 | 获取HTML网页头信息 | HEAD |
requests.post() | 一致 | 向HTML网页提交POST请求 | POST |
requests.put() | 一致 | 向HTML网页提交PUT请求 | PUT |
requests.patch() | 一致 | 向HTML网页提交局部修改请求 | PATCH |
requests.delete() | 一致 | 向HTML 页面提交删除请求 | DELETE |
-
requests.request(method,url,**kwargs)
**kwargs : 控制访问的参数,均为可选项:
params
、data
、json
、headers
、cookies
、auth
、files
、timeout
、proxies
、allow_redirects
、stream
、verify
、cert
例:
hd = {‘user-agent’:‘Chrom/10’}
r = requests.request{‘POST’,‘http://www.baidu.com’,headers=hd}
r = requests.request(‘GET’,‘http://www.baidu.com’,timeout=10)
fs = {‘file’ : open(‘data.xls’,‘rb’)}
r = resquests.request(‘POST’,‘http://www.baidu.com’,files=fs)
pxs = {‘http’:‘http://user:pass@10.10.10.1:1234’
‘https’:‘https://10.10.10.1:4321’}
r = requests.request(‘GET’,‘http://www.baidu.com’,proxiex=pxs)
网络爬虫的尺寸
爬取网页、玩转网页 | 爬取网站、爬取系列网站 | 爬取全网 |
---|---|---|
小规模,数据量小 爬取速度不敏感 Requests库 | 中规模,数据规模较大 爬取速度敏感 Scrapy库 | 大规模,搜索引擎 爬取速度关键 定制开发 |
-
网络爬虫限制
来源审查:判断User-Agent进行限制
发布公告:Robots协议 (Robots Exclusion Standard)
例:
http://www.baidu.com/robots
*无robots协议的网站允许所有爬虫无限制爬取
Robots协议基本语法:*代表所有,/ 代表根目录
例:
User-agent : *
Disallow : /