计算机项目部第四次部门培训——爬虫基础

爬虫基础培训

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值