爬虫基础简介

一:爬虫简介

(1)图解:

 (2)互联网

1:什么是互联网

(1)互联网由pc 网线 交换机 路由器 防火墙互连在一起 连接成一张网状的样式

2:互联网建立的目的

(1) 互联网建立的核心价值 --->数据共享以及传递

(2)互联网建立就是为了将彼此连接在一起使其逻辑跨越空间的限制 ---> 可以实现数据的共享传递

3:什么是上网

(1)作为客户端浏览器向服务端发送请求

(2)服务端接收到客户端的数据请求 进行数据查找 返回给客户端

(3)客户端接收到服务端的数据 进行渲染等

4:爬虫

(1)模拟客户端的请求(浏览器的请求)向服务端发送请求

(2)获取服务端返回的数据

(3)筛选我们所需要的数据

(4)将筛选结果保存

PS:

(1)如果将互联网比作一张大网

(2)那么一台计算机上的数据便相当于一个个猎物

(3)爬虫程序相当于猎人 在互联网上获取猎物

 二:爬虫的基本流程

1:图解

 2:数据请求

(1)使用http通过request向目标网站发送请求

(2)请求携带一系列http协议所需要的参数

(3)请求头 请求体等等

3:数据回复

(1)如果服务端接受请求并进行回复

(2)得到response回复 包含html代码 文本 图片 视频等等

4:数据解析

(1)正则表达式 ---> 匹配我们所需要的信息

(2)解析html数据库 ---> Beautifulsoup pyquery等

(3)解析json数据 ---> json模块

(4)解析二进制  ---> 以wb的模式读取文件

5:数据存储

(1)以文本的形式

(2)数据库

 三:请求与响应

1:图例

 2:图解

(1)客户端通过http协议向服务端发送请求

  例如:https://www.cnblogs.com/SR-Program/

(2)request:用户通过浏览器(socket client)向服务端(socket server)发送请求

(3)response:接受并分析request的请求参数 进行相应的数据回复(文本 图片 视频等)

(4)存储:在接收到response之后进行数据筛选 对筛选之后的数据进行保存等 

四:request模块简介

1:常用请求库 测试网站:http://httpbin.org/get

2:request

(1)安装

pip install requests

 (2)get请求

(3)常见的请求参数

1:cookie 

(1)保存用户状态 校验用户

(2)一串散列值

2:Host 

(1)一般为域名

3:referer

(1)表示从哪里来

4:User-agent

(1)标识用户的浏览器等

五:request使用方式

 (1)get请求

'''
响应对象 = requests.get(......)

**参数:**

url:请求地址

headers = {} 请求头携带的参数

cookies = {} cookie携带的参数 也可以加入headers中

params = {} get携带的参数

proxies = {'http':‘http://端口:ip’} 验证网站是否使用代理

timeout = 0.5 防止访问时间过长 照成假死

allow_redirects = False # 禁止重定向
'''

 (2)post请求

'''

响应对象 = requests.get(......)

**参数:**

url:请求地址

headers = {} 请求头携带的参数

cookies = {} cookie携带的参数 也可以加入headers中

json = {} 上传json格式的数据

files = {‘file’:open(...,‘rb’)} 上传文件

data = {} post携带数据

timeout = 0.5 防止访问时间过长 照成假死

allow_redirects = False  # 禁止重定向

'''

(3)响应参数

'''
r.url    获取请求的url

r.text        获取相应文本信息

r.encoding = 'gbk'   

r.content   二进制

r.json()    json.loads(r.text)

r.status_code   响应状态码

r.headers      响应头

r.cookies    响应cookie(set——cookie)

r.history   响应对象

'''
url = "http://www.aa7a.cn/user.php"   # 请求的url地址
headers = {
    "Referer": "http://www.aa7a.cn/user.php?&ref=http%3A%2F%2Fwww.aa7a.cn%2Findex.php",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
}  # 请求头
data = {
    "username": "11401339@qq.com",
    "password": "123..",
    "captcha": "txgk",  # 验证码
    "remember": "1",
    "ref": "http://www.aa7a.cn/index.php",
    "act": "act_login",
}  # post提交的数据
res = requests.post(
    url=url,
    headers=headers,
    data=data

)
cookies = res.cookies.get_dict()  # cookies存入get_dict中 获取cookie


# 获取cookies向主页发起请求
res1 = requests.get(
    'http://www.aa7a.cn/',
    headers=headers,
    cookies=cookies,
)
if "11401339@qq.com" not in res1.text:
    print("爬取失败")
else:
    print("爬取成功")
模拟登录
import requests
import re

url = "https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=24"

res = requests.get(url=url)


# <a href="video_1625984" class="vervideo-lilink actplay"> 进入跳转到视频页面

reg_text = '<a href="(.*?)" class="vervideo-lilink actplay">'   # 正则匹配我们所需要的连接

res1 = re.findall(reg_text,res.text)
# print(res1)    # 获取一个个连接存入在列表中

for url in res1:
    url = 'https://www.pearvideo.com/'+url   # 获取进入视频连接的地址的页面
    # srcUrl="https://video.pearvideo.com/mp4/adshort/20191125/cont-1626153-14629209_adpkg-ad_hd.mp4" 真正的向后端请求视频连接
    res2 = requests.get(url=url)
    # res3 = re.findall("srcUrl='(.*?)'",res2.text)      # 获取ship连接
    res3 = re.findall('srcUrl="(.*?)"', res2.text)[0]  # 存放在列表中 获取出来视频地址
    print(res3)
    name = res3.rsplit('/', 1)[1]    # 获取存放的路径
    res4 = requests.get(res3)      # 爬取一个个视频连接地址
    with open(name, 'wb') as f:
        for line in res4.iter_content():   # 循环打印 
            f.write(line)
爬取梨视频网站

PS:

(1)post与get参数都会形成key=value&key=value的形式

(2)get直接拼接在url中

(3)post则在formdata中

六:总结

#1、总结爬虫流程:
    爬取--->解析--->存储

#2、爬虫所需工具:
    请求库:requests,selenium
    解析库:正则,beautifulsoup,pyquery
    存储库:文件,MySQL,Mongodb,Redis

#3、爬虫常用框架:
    scrapy
原文地址:https://www.cnblogs.com/SR-Program/p/11927711.html