爬虫基础培训
文章目录
1、Requests库
1.1 Robots协议
Robots Exclusion Standard 网络爬虫排除标准
作用:网站告知网络爬虫哪些页面可以抓取,哪些不行
形式:在网站根目录下的robots.txt文件(网页url后加/robots.txt即可查看)
1.2 requests.request()
requests.request(method,url,**kwargs):构造一个请求,返回一个Response对象。
参数讲解:
method:7种请求方式:‘GET’,‘HEAD’,‘POST’,‘PUT’,‘PATCH’,‘DELETE’,‘OPTIONS’
**kwargs:13个控制访问的参数,均为可选项:
1、params:字典或字节序列;作为参数增加到url中
2、data:字典、字节或文件对象;作为Request的内容
3、headers:字典;HTTP定制头
4、timeout:数值;设定超时时间,单位为秒
5、verify:True/False,默认为True;认证SSL证书开关
Response对象的属性:
1、status_code:获取状态码;正常为200,404或其他为出错
2、encoding:从HTTP的header中猜测的响应内容编码格式,若header中不存在charset,则认为编码是ISO-8859-1
3、apparent_encoding:从内容中分析出的响应内容编码方式(备选编码方式),该方式一般更准确
4、text:将HTTP响应内容以字符串形式返回,会自动根据响应头部的字符编码进行解码
5、content:HTTP响应内容的二进制形式
1.3 Requests库的常见异常
1、requests.ConnectionError:网络连接异常
2、requests.HTTPError:HTTP错误异常
3、requests.URLRequired:URL缺失异常
4、requests.TooManyRedirects:请求超过了设定的最大重定向次数
5、requests.ConnectTimeout:连接远程服务器超时
6、requests.Timeout:请求URL超时
Response对象检查状态码是否正常的方法:
r.raise_for_status():若状态码不是200,产生HTTPError异常。
1.4 requests.get()
requests.get(url,params=None,**kwargs):获取HTML网页;返回一个Response对象
实践部分:
1、迫害百度1(爬取网页的通用代码框架)
“http://www.baidu.com”
2、向京东提交关键字
“https://search.jd.com/Search”
3、Amazon商品爬取
“https://www.amazon.cn/dp/B079BG11X2/ref=sr_1_9?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&keywords=Python&qid=1574924345&sr=8-9”
4、网络图片的爬取
“http://www.005.tv/uploads/allimg/161203/2004152519-2.jpg”
1.5 其它方法
requests.head(url,**kwargs):获取HTML网页头的信息方法
requests.post(url,data=None,json=None,**kwargs):向HTML网页提交POST请求方法
requests.put(url,data=None,**kwargs):向HTML网页提交PUT请求的方法
requests.patch(url,data=None,**kwargs):向HTML网页提交局部修改请求
requests.delete(url,**kwargs):向HTML页面提交删除请求
2、Beautiful Soup库
2.1 解析HTML信息
用BeautifulSoup库解析html信息:
from bs4 import BeautifulSoup
soup=BeautifulSoup('<p>data</p>','html.parser')
实践部分:迫害百度2
“https://www.baidu.com/”
BeautifulSoup类的基本元素:
.tag:标签,最基本的信息组织单元
.name:标签的名字
.attrs:标签的属性;字典形式
.string:标签内非属性字符串(只适用tag包含单个子节点)
.text:标签内非属性字符串(tag包含多个子节点)
实践部分:“http://python123.io/ws/demo.html”
2.2 find_all和find方法
.find_all(name,attrs,recursive,string,**kwargs):返回一个列表,存储查找的结果
参数讲解:
name:对标签名称的检索字符串
attrs:对标签属性值的检索字符串,可标注属性检索
recursive:是否对子孙所有节点搜索,默认为True
string:对标签内非属性字符串区域的检索字符串
.find():搜索且只返回一个结果,类型为字符串(参数同find_all方法)
3、Re库
3.1 正则表达式
正则表达式:其语法由字符和操作符构成
常用操作符:
1、".“表示任何单个字符
2、”[]“表示字符集,对单个字符给出取值范围;如[abc]表示a、b、c
3、”*“前一个字符0次或无限次扩展;abc*表示ab,abc,abcc,…
4、”\d"表示数字,等价于[0-9]
5、"\w"表示单词字符,等价于[A-Za-z0-9_]
实践部分:“https://www.osgeo.cn/app/sb207”
3.2 Re库
re库采用raw string类型(指不包含转义符的字符串)表示正则表达式,表示为r’text’。
常用函数:
1、re.search:在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
2、re.match:从一个字符串的开始位置起匹配正则表达式,返回match对象;若开始位置不匹配,返回空match对象
3、re.findall:搜索字符串,以列表类型返回全部能匹配的字符串
Re库的match对象:
常用属性:
.string:待匹配文本
.re:匹配使用的正则表达式
常用方法:
.group(0):获得匹配后的字符串
.start():匹配字符串在原始字符串的开始位置
.end():匹配字符串在原始字符串的结束位置
实践部分:梨视频爬取
“https://www.pearvideo.com/video_1625572”
简单的实战(Requests库)
LOL官网全英雄皮肤图片爬取(仿照《20行Python代码爬取王者荣耀全英雄皮肤》)
import requests
import os
def getHerolist():
url="https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js"
#获取英雄列表的json文件
herolist=requests.get(url)
#解析序列化为json格式的数据
herolist_json=herolist.json()
#提取英雄的名字
hero_name=list(map(lambda x:x['name'],herolist_json['hero']))
#提取英雄的编号
hero_number=list(map(lambda x:x['heroId'],herolist_json['hero']))
return hero_name,hero_number
def downloadPic():
#获取英雄列表的信息
hero_name,hero_number=getHerolist()
i=0
for j in hero_number:
#创建文件夹
os.mkdir("D:\\LOL_skin\\"+hero_name[i])
#进入创建好的文件夹
os.chdir("D:\\LOL_skin\\"+hero_name[i])
for k in range(30):
#拼接url
if k<10:
onehero_link="https://game.gtimg.cn/images/lol/act/img/skin/big"+str(j)+'00'+str(k)+'.jpg'
else:
onehero_link="https://game.gtimg.cn/images/lol/act/img/skin/big"+str(j)+'0'+str(k)+'.jpg'
#请求url
im=requests.get(onehero_link)
if im.status_code==200:
#写入文件
with open(str(k)+'.jpg','wb') as f:
f.write(im.content)
print(hero_name[i]+"的图片已下载完毕")
i+=1
downloadPic()
参考链接:https://blog.csdn.net/qq_42453117/article/details/103190981