Python网络爬虫1

1 网络爬虫之前奏

1.1 网络爬虫课程内容导学

在这里插入图片描述

1.2 Python语言开发工具选择

在这里插入图片描述
本课主要使用以下4种:
在这里插入图片描述
python的IDLE是python自带的默认的常用的入门级编写工具

2 网络爬虫之规则

在这里插入图片描述

2.1 Requests库入门

2.1.1 Requests的安装方法

Requests库(http://www.python-requests.org)是公认的最好的爬取第三方库,由2个特点:

  1. 简单
  2. 很简洁,甚至用一行代码就能从网页上获取相应的资源

安装方法:以管理员运行command
在这里插入图片描述
测试:
在这里插入图片描述
在这里插入图片描述

2.1.2 Requests库的get()方法

在这里插入图片描述
在这里插入图片描述
Python大小写敏感
在这里插入图片描述
使用request方法封装
Requests库一共提供7个常用方法,request方法是基本方法,其他6个方法提供调用request方法实现
在这里插入图片描述
在这里插入图片描述
r.status_code:检测请求的状态码。如果是200,则说明返回成功。
r.headers:获得页面的头部信息
Response对象包括服务器返回的全部信息和向服务请求的request信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
网络上的资源都有编码,如果没有编码就会导致无法可读
r.apparent_encoding比r.encoding更准确

2.1.3 爬取网页的通用代码框架

可以准确可靠的爬取
get不一定永远可以,因为网络连接有风险,异常处理很重要
在这里插入图片描述
Timeout:发出URL请求到获得内容整个过程的异常
ConnectTimeout:只是连接远程服务器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通用代码框架使得爬取变得更稳定更有效更可靠

2.1.4 HTTP协议及Requests库方法

HTTP协议

在这里插入图片描述
用户发起请求,服务器响应。
无状态请求是第一次和第二次之间没有关联
应用层协议指该协议工作于tcp协议之上(?)
在这里插入图片描述
在这里插入图片描述
即相当于文件的路径,只不过是存在Internet上的
在这里插入图片描述
即Requests库提供的6个函数

在这里插入图片描述
HTTP协议通过URL对资源做定位,通过常用的6个方法对资源管理,每一次操作都是独立无状态的
在HTTP协议的世界里,网络通道和服务器都是黑盒子,他能看到的就是URL和对URL做相应操作

在这里插入图片描述

Requests库方法(post()、put())

在这里插入图片描述
在这里插入图片描述
用很少的流量获取网络资源的概要信息

Request的post()方法传的类型不同,得到的结果不同:
1.在这里插入图片描述
2.在这里插入图片描述
在这里插入图片描述

2.1.2 Requests库主要方法解析

request

在这里插入图片描述
在这里插入图片描述
OPTIONS:向服务获取一些服务器能跟客服端打交道的参数,不与获取资源直接相关,所以用的比较少
在这里插入图片描述
在这里插入图片描述
向服务器提交数据
在这里插入图片描述
也是比较常见的提交数据的
在这里插入图片描述
定制HTTP头
Chrome/10:代表Chrome的第10个版本
可模拟任何浏览器向服务器发出访问
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
隐藏用户用户爬取网页的原IP地址
在这里插入图片描述

get

在这里插入图片描述

head

在这里插入图片描述

post

在这里插入图片描述

put

在这里插入图片描述

patch

在这里插入图片描述

delete

在这里插入图片描述

总结

为什么要这样设计?后6个方法时,由于某些方法要常用到某些参数,所以就把这些参数作为显示定义的参数量放到参数,其他放到可选参数里
最常使用get方法,向服务器爬取内容而不提交内容

2.1.3 总结

在这里插入图片描述
使用get爬虫
使用head获得较大资源的概要
在这里插入图片描述
在这里插入图片描述

import requests
import time

def getHTMLText(url):
    try:
        r=requests.get(url)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
    except:
        print("failed")


if __name__=="__main__":
    start=time.perf_counter()
    for i in range(100):
        getHTMLText("http://www.baidu.com")
    end=time.perf_counter()
    print("用时%.5f秒"%(end-start))

在这里插入图片描述
在这里插入图片描述
我没有考虑它是否成功的爬取了100次。。。

2.2 网络爬虫的“盗亦有盗”

2.2.1 网络爬虫引发的问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.2 Robots协议

在这里插入图片描述
在这里插入图片描述
不允许以“?”“popm目录下的html文件”。。。
在这里插入图片描述
无robots协议就是说可以任意爬取

2.2.3 Robots协议的遵守方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
即访问次数小

2.3 Requests库网络爬虫实战(5个实例)

以爬虫视角看待网络内容

2.3.1 京东商品页面的爬取

在这里插入图片描述
r.encoding:从HTTP的头部分就可以解析出编码信息,京东提供了编码

import requests
import time

def getHTMLText(url):
    try:
        r=requests.get(url)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        print(r.text[:1000])
    except:
        print("failed")


if __name__=="__main__":
    getHTMLText("https://item.jd.com/100006349587.html")

居然跳出的是登陆
在这里插入图片描述

2.3.2 亚马逊商品页面的爬取

在这里插入图片描述
在这里插入图片描述
能爬回来东西说明就不是网络的问题
也就是说网站拒绝了爬虫的请求
response对象r包含了request请求
所以要修改头部信息
在这里插入图片描述
在这里插入图片描述

2.3.3 百度360搜索关键词提交

在这里插入图片描述
在这里插入图片描述
解析内容以后讲
在这里插入图片描述

2.3.4 网络图片的爬取和存储

在这里插入图片描述
在这里插入图片描述
图片是二进制形式,如何保存为文件?

  • 自定义名字
    在这里插入图片描述
  • 原名字
    在这里插入图片描述

2.3.5 IP地址归属地的自动查询

在这里插入图片描述
在这里插入图片描述
尽量约束r.text的大小,如r.text[-500:],否则会影响idle的使用
在这里插入图片描述
只要知道按下按钮后向后台提交的url的形式,就可以代码模拟提交

猜你喜欢

转载自blog.csdn.net/qq_42713936/article/details/105804104