爬虫(又称为网页蜘蛛,网络机器人,在 FOAF 社区中间,更经常的称为网页追逐者);它是一种按照一定的规则,自动地抓取网络信息的程序或者脚本。
如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,他们沿着蜘蛛网抓取自己想要的猎物/数据。
爬虫的基本流程:
1确定目标 2发起请求 3解析内容 4保存数据
这四个步骤大家可以想象成去大街上找女朋友的,那么你就必须需要一个目标,得找你喜欢得,然后在是问要微信,也就是我们说得发送请求,如果表白成功就是200 ,那如果表白失败,就是404,我们这里假设他表白成功,那接下来怎么办,是不是你们要一个相互了解得过程,我们在爬虫里面管他叫我们解析数据,相互了解完成后,接下来就要要准备结婚了,在爬虫可以把他理解成我们得保存数据。
1)发起请求:Request
请求的发起是使用 http 库向目标站点发起请求,即发送一个Request
Request对象的作用是与客户端交互,收集客户端的 Form、Cookies、超链接,或者收集服务器端的环境变量。
Request 对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。客户端可通过 HTML 表单或在网页地址后面提供参数的方法提交数据。
然后服务器通过 request 对象的相关方法来获取这些数据。request 的各种方法主要用来处理客户端浏览器提交的请求中的各项参数和选项。
Request 包含:请求 URL、请求头、请求体等
Request 请求方式: GET/POST
请求url: url全称统一资源定位符,一个网页文档、一张图片、 一个视频等都可以用url唯一来确定
请求头: User-agent:请求头中如果没有 user-agent 客户端配置,服务端可能将你当做一个非法用户;
cookies: cookie 用来保存登录信息
一般做爬虫都会加上请求头
例如:抓取百度网址的数据请求信息如下:
2)获取响应内容
爬虫程序在发送请求后,如果服务器能正常响应,则会得到一个Response,即响应;
Response 信息包含:html、json、图片、视频等,如果没报错则能看到网页的基本信息。例如:一个的获取网页响应内容程序如下:
以上内容输出的就是网页的基本信息,它包含 html、json、图片、视频等,如下图所示:
Response 响应后会返回一些响应信息,例下:
①响应状态
200:代表成功
301:代表跳转
404:文件不存在
403:权限
502:服务器错误
②Respone header
set-cookie:可能有多个,是来告诉浏览器,把cookie保存下来
③preview 是网页源代码
最主要的部分,包含了请求资源的内容,如网页html、图片、二进制数据等
3)解析内容
解析 html 数据:解析 html 数据方法有使用正则表达式、xpath,第三方解析库如 Beautifulsoup,pyquery 等
解析 json 数据:解析 json数据可使用 json 模块
解析二进制数据:以 b 的方式写入文件
4)保存数据
爬取的数据以文件的形式保存在本地或者直接将抓取的内容保存在数据库中,数据库可以是 MySQL、Mongdb、Redis、Oracle 等……
写在最后
爬虫的总流程可以理解为:蜘蛛要抓某个猎物–>沿着蛛丝找到猎物–>吃到猎物;即爬取–>解析–>存储;
在爬取数据过程中所需参考工具如下:
爬虫框架:Scrapy
请求库:requests、selenium
解析库:正则、beautifulsoup、pyquery
存储库:文件、MySQL、Mongodb、Redis……
那么我们现在上手操做一个接单的爬虫的程序
大家对我们王者荣耀这个游戏应该都不陌生,那我们就写一个简单的爬虫程序来简单入个门
我们前面讲了爬虫的基本步骤第一步是不是确定目标。
我们打开游览器搜索王者荣耀出现这个界面
点进去
大家可以看到这个界面,点击我们得英雄资料
这里面就是我们需要爬取图片
鼠标右键,点击检查
点到小箭头,下面我们可以看到这个见面
把鼠标点到艾琳,大家可以看到右边的前端html代码就会到 a href标签下面
这个就是我们需要的图片地址,那接下来我们怎么使用爬虫技术呢?
import requests
from pyquery import PyQuery
url="https://pvp.qq.com/web201605/herolist.shtml"
html=requests.get(url).content
print(html)
这里已经表示我们请求成功了,接下来我们就需要解析数据
doc=PyQuery(html)
items=doc('.herolist>li').items()
print(items)
for item in items:
url=item.find('img').attr('src')
# print(url)
urls='https:'+url
name=item.find('a').text()
print(name)
url_content=requests.get(urls).content
我们根据惠html的数据进行解析,代码就是这样了,可以自己试一下哦
最后就是我们需要保存数据
with open('./picture/'+name+'.jpg','wb')as file:
file.write(url_content)
print('正在下载:%s....%s'%(name,urls))
我们来看一下结果吧
你学会了嘛?