Python爬虫——HTTP协议详解

url:定义网络资源的标识

URL格式 http:// [host] [:port] [path]

  • host:合法的Internet主机域名或IP地址
  • port:端口号,缺省端口(默认端口)为80
  • path:请求资源的路径

结构:协议://域名/路径1/路径2/路径3/…/路径n/?参数名1=参数值1&参数名2=参数值2…

  • 协议:http或https
  • 域名:www.spbeen.com spbeem.com 127.0.0.1:8000
  • 路径:web服务器做的,比如https://blog.csdn.net/mr_wanderer/category_10858163.html中,t/mr_wanderer/category_10858163.html就是路径
  • ?:必须是英文符号的?,标识符号。前面为url组成部分,后面为url参数部分。
  • &:分隔携带的多个参数。

http协议请求类型

请求类型操作
GET请求获取URL位置的资源
HEAD请求获取URL位置资源的响应消息报告,即获得该资源的头部信息
POST请求向URL位置的资源后附加新的数据
PUT请求向URL位置存储一个资源,覆盖原URL位置的资源
PATCH请求局部更新URL位置的资源,即改变该处资源的部分内容
DELETE请求删除URL位置存储的资源

PATCH和PUT的区别:PATCH可以节省网络带宽。
假如用户修改了UserName,其他(UserID、UserInfo等)不变:

  • 采用PATCH,仅向URL提交UserName的局部更新请求
  • 采用PUT,必须交所有的字段一并提交到URL,未提交字段被删除

GET和POST请求的区别:

  • GET请求时,请求主体的容量有限制,很短,所以GET请求通常不设置请求主体。
  • POST请求时,请求主体的容量很大,所以POST请求通常用于提交数据。
  • GET请求也可携带参数:
    不携带参数的url:http://www.spbeen.com/tool/request_info/
    携带参数的url:http://www.spbeen.com/tool/request_info/?page=4&pageSize=60&userid=asdfczd

常见场景说明:

  • 二维码本质上就是一条带有参数的URL,所以扫码的过程就是GET请求。
  • 注册和登陆常用POST请求,也可以用GET,因为GET也可以携带参数。
  • 修改个人信息:几乎都是使用POST请求。
  • 网盘存储一定是POST提交文件,大文件可以分割成多个小文件,然后还有断点续传功能。

http请求头结构

在这里插入图片描述
请求行内容:请求方法、请求网址、协议版本

请求体(报文体):通常只在POST请求时才有

请求头(报文头)内容:{“头部字段名”:”值”}*N

  • 爬虫常用字段
    【网址来源】Referer: https://blog.csdn.net/mr_wanderer/category_10858163.html
    【用户代理信息】User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36
  • 有时很关键的字段
    【请求主题的内容类型】Content-Type: text/plain;charset=UTF-8 通常用于POST提交数据时,需要申明请求主体的数据类型
    【常用与登录状态下的身份标识】Cookie: uuid_tt_dd=10_30832384060-1589545271024-303040;
  • 用处不大的请求头字段信息
    【接收的内容】Accept: application/json, text/javascript, /; q=0.01
    【接收的编码】Accept-Encoding: gzip, deflate, br
    【接收的语言】Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

响应头的字段内容

响应头字段说明
Content-Encoding文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。
Content-Length表示内容长度。
Content-Type表示后面的文档属于什么MIME类型。默认为text/plain,但通常需要显式地指定为text/html。
Location表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServietResponse的sendRedirect方法,该方法同时设置状态码为302.
Server服务器名字。Serviet一般不设置这个值,而是由Web服务器自己设置。
Set-Cookie设置和页面关联的Cookie。Serviet不应使用response setHeader(“Set-Cookie”,…),而是应使用HttpServietResponse提供的专用方法addCookie。

http相应状态码

HTTP协议中的一种规定,绝大部分站支持HTTP响应状态码规定,但也有极少部分不支持。

【】200系列:成功

  • 200 成功
  • 201 创建成功(该请求已成功,并创建了一个新的资源。这通常是在POST请求,或是某些PUT请求之后返回的响应。)

【】300系列:重定向

  • 301 永久性转移(301错误主要是域名更换后,搜索引擎还在使用你原有的域名地址访问你的网站,如果搜索引擎爬取的时候得到的是一个301错误,那么搜索引擎就知道服务器已经更换了域名,下次就会使用新域名来索引网站。当然,服务器要告诉搜索引擎新的域名是什么。)
  • 302 临时性转移(意思就是你访问网址a,但是因为服务端的拦截器或者其他代码处理,会被重定向到网址b。)
  • 304 没有更改(如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回304状态码。简单的表达就是:服务端已经执行了GET,但文件未变化。)

【】400系列:失败

  • 401 认证失败(用户没有访问权,需要进行身份认证)
  • 403 禁止请求(资源不可用,服务器理解客户的请求,但拒绝处理它)
  • 404 未找到资源
  • 405 方法不被允许
  • 408 请求超时

【】500系列:服务器错误

  • 500 服务器错误(服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。)
  • 502 网关错误(作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。)
  • 503 服务器错误(由于临时的服务器维护或者过载,服务器当前无法处理请求。通常,这个是暂时状态,一段时间会恢复。)
  • 504 网关超时(作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Python 爬虫实现,用于从北京租房信息网站上爬取租房信息并将其导入到 Excel 文件中。 首先,我们需要安装以下 Python 库: - requests:用于发送 HTTP 请求和获取网页内容。 - Beautiful Soup:用于解析 HTML 和 XML 网页内容。 - openpyxl:用于操作 Excel 文件。 可以使用 pip 命令进行安装: ``` pip install requests beautifulsoup4 openpyxl ``` 接下来,我们需要编写 Python 代码: ```python import requests from bs4 import BeautifulSoup from openpyxl import Workbook # 发送 HTTP 请求并获取网页内容 url = 'https://bj.zu.anjuke.com/fangyuan/p1/' response = requests.get(url) html = response.text # 使用 Beautiful Soup 解析网页内容 soup = BeautifulSoup(html, 'html.parser') houses = soup.select('.zu-itemmod') # 创建 Excel 文件并添加表头 wb = Workbook() ws = wb.active ws.append(['标题', '链接', '小区', '面积', '租金']) # 遍历租房信息并将其添加到 Excel 文件中 for house in houses: title = house.select('.zu-info h3 a')[0].text.strip() link = house.select('.zu-info h3 a')[0]['href'] community = house.select('.details-item')[0].text.strip() area = house.select('.details-item')[1].text.strip() price = house.select('.zu-side strong')[0].text.strip() ws.append([title, link, community, area, price]) # 保存 Excel 文件 wb.save('beijing_rent.xlsx') ``` 该爬虫程序将会从北京租房信息网站的第一页开始爬取租房信息,包括标题、链接、小区、面积和租金,并将其添加到 Excel 文件中。你可以根据需要修改代码以实现更多功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值