什么叫爬虫?
-
spider
爬虫的单词是spider,spider是什么意思呢?spider man,这是蜘蛛侠的意思,spider 就是蜘蛛的意思,爬虫就是蜘蛛,为什么叫蜘蛛呢?大家想蜘蛛一般在蜘蛛网上吧,蜘蛛会在网上爬来爬去,还会在网上搜寻猎物,是不是感觉很形象,爬虫的任务就是在网上搜索东西,蜘蛛就像你的爬虫程序,蜘蛛网就像互联网,猎物是什么?数据!是不是豁然开朗,根据英文学东西会更快。
-
爬虫就是从网上爬数据
现在人工智能,大数据离我们越来越近,很多公司在开展相关的业务,但是人工智能和大数据中有一个东西非常重要,那就是数据,但是数据从哪里来呢?其中一条途径就是通过爬虫获取
-
爬虫就是模拟客户端发送网络请求,接收请求响应,然后抓取响应的数据,原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做
第一个简单的爬虫程序
我们先来通过一个简单的爬虫程序来熟悉爬虫的流程
# import关键字导入模块 导入模块后可以使用该模块里的属性和方法
import requests
# print(dir(requests)) # dir:查看对象的属性和方法
# requests模块的作用 :发送网络请求,返回响应数据
url = "http://www.baidu.com" # 这是一个url,直接拷贝过来
# headers:参数是HTTP协议的请求头部,这里面的内容会构造成http请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
}
# User-Agent:用户代理,让请求服务器知道用户用什么浏览器请求它,在什么平台上请求它,为了模拟的更像人类行为,我们会在爬虫里面添加这一个字段;浏览器根据这个字段返回不同的内容(比如手机和电脑)
response = requests.get(url, headers=headers)
# get方法:向url对应的服务器发送一个get请求,返回的是一个响应对象,
# print(response)
response = response.text
# 对响应内容进行解码
# 获取网页源码的通用方法
# response.content.decode()
# response.content.decode("GBK")
# response.text
# 以上三种方法从前往后尝试,能够100%的解决所有网页解码的问题
# response.text :返回的是 bytes 型的二进制数据
# response.content :返回的是一个 unicode 型的文本数据
print(response)
简单的爬虫流程
构造http请求信息-->发送请求获取响应-->解析响应提取数据-->对数据进行存储
构造http请求
http:超文本传输协议,浏览器和服务器之间传递数据的协议
协议:事先约定好的规定,你浏览器和服务器传输数据就要遵循着讯这个规定,如果你不这样做,那么会导致什么后果呢?
http格式:
- 请求格式:请求行、请求头、请求体,但是并不是所有的http请求都有请求体,get没有请求体
- 响应格式:响应行、响应头、响应体
requests模块会自动帮我们构造http请求,只要我们给出指定的参数既可
发送请求获取响应
注意:
我请求的是www.baidu.com
,但是浏览器他还请求了很多东西
浏览器会主动请求js,css等内容,js会修改页面的内容,js也可以重新发送请求,最后浏览器渲染出来的内容在elements中,其中包含css,图片,js,url地址对应的响应等。
但是在爬虫中,爬虫只会请求我们写的url地址(也就是第一个),对应的拿到url地址对应的响应
浏览器渲染出来的页面和爬虫请求的页面并不一样
所以在爬虫中,需要以url地址对应的响应为准来进行数据的提取
我们这个爬虫就是模拟浏览器发送请求获取响应
解析响应提取数据
响应的数据很多,而且需要解析,解析后,我们可以提取我们想要的数据
对数据进行存储
拿到了数据我们就进行保存,以便下次再用,下次怎么用就不管了
那么接下来我们开始一个简单的爬虫程序
根据前面的流程,接下来来一个复杂一点的
爬百度图标
import requests
# 构造http请求信息,提供get()需要的参数,requests自动帮我们构造http请求
# url在network里面找
url = "https://www.baidu.com/img/dong_28db0e2033ff1faf14771bc40ad0a9cd.gif"
# 每个爬虫程序都需要填的,否则对方服务器不知道你是谁
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
}
# 发送请求,获取响应(请求方式是get)
response = requests.get(url, headers=headers)
# 解析响应,提取数据
response = response.content
# 保存数据
with open('children.gif', 'wb') as f:
f.write(response)
print("OK")
转载于:https://my.oschina.net/u/4142063/blog/3057819