网站首页 > 技术文章 正文
代码不是看出来的,而是敲出来的,欢迎关注公众号,收藏教程,跟着步骤练习爬虫,成为真正的Spider Man。
在第一篇教程里(不跳步骤新手python爬虫教程(一))我们学习了安装python、运行python、下载IDE: Pycharm(代码编辑器)以及浏览器的网络请求等相关知识内容,下面紧接着开始爬虫第二篇教程的学习。
步骤一:认识http、https
HTTP:超文本传输协议。以明文形式传输,效率高,不安全。而HTTPS:HTTP+SSL(安全套接字层)。SSL证书需要购买申请,功能越强大的证书费用越高。传输数据前先加密,接收数据后解密获取内容,效率低,更安全。http用的是80端口,而https用的是443端口。http报文格式如下图:
步骤二:请求行与请求头
在Headers里面我们可以看到当前请求网址的General中请求的Request URL地址、Request Method请求方法、Status Code状态码等信息以及Response Headers响应头、Request Headers请求头以及Query String请求参数。
其中Request Method请求方法常见的有GET请求和POST请求。GET请求无请求体,POST请求有请求体。POST请求常用于登录、注册,传输大文本等(因为POST请求可以携带比GET更大的数据量),例如翻译网页等。Status Code状态码常见的有 200(成功)服务器已成功处理了请求。400(错误请求)服务器不理解请求的语法。401(未授权)请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。403(禁止)服务器拒绝请求。404(未找到) 服务器找不到请求的网页。
其中我们重点学习的是Request Headers,包括我们常见的请求行与请求头。
User-Agent(用户代理):对方服务器通过user-agent知道请求对方资源的是什么浏览器,或者说是不是浏览器,通过chrome可以模仿(模拟)手机版的网页浏览,模仿时候,user-agent是改成手机版的。
Accept:告诉服务端,我想接受什么数据
Accept-Encoding:告诉服务端我可以接受什么编码方式的数据。
Accept-Language:告诉服务端我们希望接受什么语言的数据。
Cookie:用来存储用户信息的,每次请求都会被带上发送给对方的浏览器。要获取登陆后才能访问的页面的内容。对方的服务器会通过cookie来判断爬虫。
步骤三:requests模块
requests模块是一个第三方模块,所以我们首先需要安装requests模块。打开命令提示符窗口(键盘win键+R键,输入cmd,点击回车),敲入pip install requests进行下载。
requests模块的使用。首先,像许多别的python第三方模块一样,用之前,我们需要在代码的第一行导包,输入import request。第一次导包会报错,在红色灯泡中选择第一行的install requests,这样requests就安装在pycharm当中了。
发送GET、POST请求,获取响应:
response1 = requests.get(url) #get请求,获取响应
response2 = requests.post(url,data = {请求体的字典}) #post请求,需要请求体
这个时候,当我们直接print(response1)或者print(response2)的话,会得到一个<Response [200]> 其中200是状态码,如果学过HTTP知识的话,我们知道,这是一个代表正常访问(200 OK)的状态码。
下面以百度的首页为例:
import requests
url = "http://www.baidu.com"
response = requests.get(url)
print(response)
import requests
url = "http://www.baidu.com"
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
response = requests.get(url,headers=headers)
print(response)
- response的方法:
1.response.content.decode()此方法是把响应的二进制字节流转化为字符串类型
2.response.text该方法获取网页内容时往往会出现乱码,所以要在此前加上一个response.encoding = “utf-8”
3.response.request.url获取发送请求的url地址
4.response.url获取响应的url地址
5.response.request.headers请求头
6.response.headers响应头
获取网页原码的方式:
1.response.content.decode()
2.response.content.decode(“gbk”)某些网站的 编码方式不是使用的"utf-8"而是"gbk"
3.response.text因为.text方法是根据响应头部的编码进行推测,所以放到最后使用,有时候也会推测正确。当我们拿到一个网页,用以上三种方式,一定可以获取到网页正确解码方式的字符串
下面以百度翻译的页面为例:
# coding=utf-8
import requests
url = "http://fanyi.baidu.com/basetrans"
query_string = {"query":"你好,世界",
"from":"zh",
"to":"en"}
headers = {"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1",}
response = requests.post(url,data=query_string,headers=headers)
print(response)
print(response.content.decode())
print(type(response.content.decode()))
运行结果如下:
关注公众号【秃头程序员】,不错过不跳步骤的新手python爬虫教程(三)
猜你喜欢
- 2024-11-06 JavaScript学习笔记(二十五)——HTTP
- 2024-11-06 原生js实现文件下载并设置请求头header
- 2024-11-06 干货-Http请求get、post工具类(get和post请求的区别是什么)
- 2024-11-06 聊聊在springcloud gateway如何获取请求体
- 2024-11-06 python接口自动化-发送get请求(python get请求 url传参)
- 2024-11-06 想测试HTTP响应不知道如何开展怎么办?
- 2024-11-06 接口测试遇到500报错?别慌,你的头部可能有点问题
- 2024-11-06 一文讲清HPP的请求方法和过程(hp partsufer)
- 2024-11-06 HTTP请求对象(获取用户请求信息)(如何查看http请求的头部信息)
- 2024-11-06 学习笔记-HTTP 请求方法详解(学习笔记-HTTP 请求方法详解pdf)
- 最近发表
-
- 使用Knative部署基于Spring Native的微服务
- 阿里p7大佬首次分享Spring Cloud学习笔记,带你从0搭建微服务
- ElasticSearch进阶篇之搞定在SpringBoot项目中的实战应用
- SpringCloud微服务架构实战:类目管理微服务开发
- SpringBoot+SpringCloud题目整理
- 《github精选系列》——SpringBoot 全家桶
- Springboot2.0学习2 超详细创建restful服务步骤
- SpringCloud系列:多模块聚合工程基本环境搭建「1」
- Spring Cloud Consul快速入门Demo
- Spring Cloud Contract快速入门Demo
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)