网络爬虫之规则
常用的ide工具
Requests库入门
网站:http://www.python-requests.org
-
Requests库安装方法(windows下)
-
安装python
-
以管理员权限打开Windows PowerShell,输入命令
pip install requests
安装 -
打开idle,输入命令
import requests
引入requests库 -
访问百度测试
r = requests.get("http://www.baidu.com") r.status_code # 输出状态码 # 200 # 更改编码,并打印网页内容 r.encoding = 'utf-8' r.text
-
-
Requests库的7个主要方法
方法 说明 requests.request() 构造一个请求,支撑一下各方法的基础方法 requests.get() 获取HTML网页的主要方法,对应HTTP的GET requests.head() 获取HTML网页头的信息方法,对应HTTP的HEAD requests.post() 向HTML网页提交POST请求方法,对应HTTP的POST requests.put() 向HTML网页提交PUT请求的方法,对应HTTP的PUT requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH requests.delete() 向HTML页面提交删除请求,对应HTTP的DELETE -
requests库的request方法
requests.request(method,url,**kwargs)
method:请求方式,对应get/put/post等7种
url:拟获取页面流程的url链接
**kwargs:控制访问的参数,共13个**kwargs:控制访问的参数,均为可选项
1.1 params:字典或字节序列,作为参数增加到url中
# 例子 >>> kv = {'key1':'value1','key2':'value2'} >>> r = requests.request('GET','http://python123.io/ws',params=kv) >>> print(r.url) http://python123.io/wa?key1=value1&key2=value2
1.2 data:字典、字节序列或文件对象,作为Request的内容
>>> kv = {'key1':'value1','key2':'value2'} >>> r = requests.request('GET','http://python123.io/ws',data=kv) >>> body='主体内容' >>> r = requests.request('GET','http://python123.io/ws',data=body)
1.3 json: JSON格式的数据,作为Request的内容
>>> kv = {'key1':'value1'} >>> r = requests.request('GET','http://python123.io/ws',json=kv)
1.4 headers: 字典,HTTP定制头
>>> hd = {'user-agent':'Chrome/10'} >>> r = requests.request('POST','http://python123.io/ws',headers=hd)
1.5 cookies: 字典或CookieJar,Request中的cookie
1.6 auth: 元祖,支持HTTP认证功能
1.7 files:字典类型,传输文件
>>> fs = {'file':open('data.xls','rb')} >>> r = requests.request('POST','http://python123.io/ws',files=fs)
1.8 timeout: 设定超时时间,秒为单位
>>> r = requests.request('GET','http://www.baidu.com',timeout=10)
1.9 proxies: 字典类型,设定访问代理服务器,可以增加登录认证
>>> 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',timeout=10)
1.10 allow_redirects : True/False,默认为True,重定向开关
1.11 stream: True/False,默认为True,获取内容立即下载开关
1.12 verify: True/False,默认为True,认证SSL证书开关
1.13 cert: 本地SSL证书路径
-
requests库的get方法
requests.get(url,params=None,**kwargs)
url:拟获取页面的url链接
params:url中的额外参数,字典或字节流格式,可选
**kwargs:12个控制访问的参数 -
requests库的head方法
request.head(url,**kwargs)
url:拟获取页面流程的url链接
**kwargs:控制访问的参数,共13个 -
requests库的post方法
request.post(url,data=None,json=None,**kwargs)
url:拟获取页面流程的url链接
data: 字典、字节序列或文件对象,作为Request的内容
json: JSON格式的数据,作为Request的内容
**kwargs:控制访问的参数,共11个 -
requests库的put方法
request.put(url,data=None,**kwargs)
url:拟获取页面流程的url链接
data: 字典、字节序列或文件对象,作为Request的内容
**kwargs:控制访问的参数,共12个 -
requests库的patch方法
request.patch(url,data=None,**kwargs)
url:拟获取页面流程的url链接
data: 字典、字节序列或文件对象,作为Request的内容
**kwargs:控制访问的参数,共12个 -
requests库的delete方法
request.delete(url,**kwargs)
url:拟获取页面流程的url链接
**kwargs:控制访问的参数,共13个 -
Response对象的属性
属性 说明 r.status_code HTTP请求的返回状态,200表示连接成功,400表示失败 r.text HTTP响应内容的字符串形式,即,url对应的页面内容 r.encoding 从HTTP header中猜测的响应内容编码方式 r.apparent_encoding 从内容中分析的响应内容编码方式(备选编码方式) r.content HTTP响应内容的二进制形式 -
Requests库的异常
异常 说明 requests.ConnectionError 网络连接错误异常,如DNS查询失败,拒绝连接等 requests.HTTPError HTTP错误异常 requests.URLRequired URL缺失异常 requests.TooManyRedirects 超过最大重定向次数,产生重定向异常 requests.ConnectTimeout 连接远程服务器超时异常 requests.Timeout 请求URL超时,产生超时异常 r.raise_for_status() 如果不是200,产生异常requests.HTTPError -
爬取网页通用代码框架
import requests def getHTMLText(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(getHTMLText(url))
-
HTTP协议对资源的操作
方法 说明 GET 请求获取URL位置的资源 HEAD 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息 POST 请求URL位置的资源后附加新的数据 PUT 请求像URL位置存储一个资源,覆盖原URL位置的资源 PATCH 请求局部更新URL位置的资源,即改变该处资源的部分内容 DELETE 请求删除URL位置存储的资源
爬虫引发的问题
-
网络爬虫的尺寸
-
Robots协议
Robots Exclusion Standard
网络爬虫排除标准作用:网站告知网络爬虫哪些页面可以爬取,哪些页面不行
形式:在网站根目录下的robots.txt文件
案例:京东的Robots协议
https://www.jd.com/robots.txt
User-agent: *
Disallow: /?*
Disallow: /pop/*.html
Disallow: /pinpai/*.html?*
User-agent: EtaoSpider
Disallow: /
User-agent: HuihuiSpider
Disallow: /
User-agent: GwdangSpider
Disallow: /
User-agent: WochachaSpider
Disallow: /
-
Robots协议的使用
网络爬虫:自动或人工识别robots.txt,再进行内容爬取。
约束性:Robots协议是建议但非约束性,网络爬虫可以不遵守,但存在法律风险
-
百度搜索全代码
-
网络图片的爬取
网络图片链接的格式
http://www.example.com/picture.jpg
图片爬取代码
网络爬虫之提取
Beautiful Soup
-
Beautiful Soup 安装
在管理员shell下输入
pip install beautifulsoup4
安装 -
Beautiful Soup库解析器
-
Beautiful Soup类的基本元素
>>> import requests
>>> r = requests.get("http://python123.io/ws/demo.html")
>>> demo = r.text
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(demo,"html.parser")
>>> print(soup.prettify())
>>> soup.title
<title>This is a python demo page</title>
>>> tag = soup.a
>>> tag
<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(demo,"html.parser")
>>> soup.a.name
'a'
>>> soup.a.parent.name
'p'
>>> soup.a.parent.parent.name
'body'
>>> tag = soup.a
>>> tag.attrs
{'href': 'http://www.icourse163.org/course/BIT-268001', 'class': ['py1'], 'id': 'link1'}
>>> tag.attrs['class']
['py1']
>>> type(tag.attrs)
<class 'dict'>
>>> soup.a
<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic
Python</a>
>>> soup.a.string
'Basic Python'
>>> soup.p
<p class="title"><b>The demo python introduces several python courses.</b></p>
>>> soup.p.string
'The demo python introduces several python courses.'
- 标签树的下行遍历