优秀的编程知识分享平台

网站首页 > 技术文章 正文

不跳步骤的新手python爬虫教程(二)

nanyue 2024-11-06 11:16:25 技术文章 3 ℃

代码不是看出来的,而是敲出来的,欢迎关注公众号,收藏教程,跟着步骤练习爬虫,成为真正的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爬虫教程(三)

最近发表
标签列表