五,网页抓取

article/2025/9/30 3:47:44

五,网页抓取

  • 前言
  • 一、Requests库的使用
  • 二、定制Requests
    • 1.传递URL参数
    • 2.定制请求头
    • 3.设置超时
    • 2.发送post请求
  • 感谢


前言

看完前几章,你可能已经对爬虫有了一个大概了解,接下来让我们深入学习静态网页的抓取。


一、Requests库的使用

在静态网页抓取中,Requests是一个非常完善,而且操作简单的强大库。它可以很简单的发送http请求。

requests库也可以通过pip下载 cmd终端键入

pip install requests

获取响应内容
在requests中 最常用的功能是获取某个网页内容
现在以我csdn博客主页为例

import requestsr=requests.get('https://blog.csdn.net/weixin_51852924?spm=1011.2124.3001.5343')
print('网页编码',r.encoding)
print('响应状态码',r.status_code)
print('字节方式响应体',r.content)

结果:

网页编码 None
响应状态码 200
字节方式响应体 b''

从字节响应可以看出是字节,所以网页编码为none。

使用方法说明
r.text服务器响应内容,会自动根据响应头部的字符编码进行解码
r.status_code检测响应状态码。如果返回200,表示请求成功;如果返回的是4xx,表示客户端错误;返回5xx表示服务器错误响应
r.content字节方式响应体,自动解码gzip和deflate编码的响应数据
r.json是requests中内置的json解码器
r.encoding服务器内容使用的文本编码

二、定制Requests

有些静态网页需要对Requests的参数进行设置才能获取需要的数据,这其中包括超时,URL参数,headers,发送post请求等。

1.传递URL参数

为了请求特定数据,需要我们在url的查询字符中加入某些数据。如果是自己构建的url,那么数据一般会跟在一个问号后,并且以键值对的形式放在url中 。对此是不是有些迷惑?举个例子

哔哩哔哩搜索罗小黑 并拿到他的链接
在这里插入图片描述

https://search.bilibili.com/all?keyword=%E7%BD%97%E5%B0%8F%E9%BB%91%E6%88%98%E8%AE%B0&from_source=webtopsuggest_search&spm_id_from=666.5.b_62696c6962696c692d7365617263682d73756767657374.1

因为数据比较多不止一页,我们翻下一页
在这里插入图片描述

https://search.bilibili.com/all?keyword=%E7%BD%97%E5%B0%8F%E9%BB%91%E6%88%98%E8%AE%B0&from_source=webtopsuggest_search&spm_id_from=666.5.b_62696c6962696c692d7365617263682d73756767657374.1&page=2

是不是发现了什么? 再看看第三页
在这里插入图片描述
https://search.bilibili.com/all?keyword=%E7%BD%97%E5%B0%8F%E9%BB%91%E6%88%98%E8%AE%B0&from_source=webtopsuggest_search&spm_id_from=666.5.b_62696c6962696c692d7365617263682d73756767657374.1&page=3

从第二页开始 ,链接末尾有一个&page=2 第三页是&page=3
这就是一个url传递的参数
在requests中可以直接把这些参数保存至字典中,用params(参数)构建到url中。
这里还是使用我的博客首页做演示

import requestsk_dict={'key1':'value1','key2':'value2'}
r=requests.get('https://blog.csdn.net/weixin_51852924?spm=1011.2124.3001.5343',params=k_dict)
print('url编码',r.url)
print('响应状态码',r.status_code)

结果

url编码 https://blog.csdn.net/weixin_51852924?spm=1011.2124.3001.5343&key1=value1&key2=value2
响应状态码 200

可以看见结果最后有&key1=value1&key2=value2

2.定制请求头

请求头Headers提供了关于请求,响应或其它发送实体的信息。对于爬虫而言,请求头十分重要。因为请求头可以反映出一些基础信息,包括浏览器的型号,版本,或者是爬虫python版本,等等。
对于一些基础的反爬虫,就会通过头部信息来拦截爬虫。

那么我们的头部信息在哪查询呢? 这里还要用到检查。

随便打开一个页面 然后打开检查
在这里插入图片描述

点击Network

然后点击name行第一个 就可以看见如下
在这里插入图片描述
可以看见有一个Request Headers 下拉 可以看见Request Headers
请求的头部信息,提取其中重要信息

:authority: search.bilibili.com
:method: GET
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36

提取其中重要部分,把代码改为

import requestsk_dict={'key1':'value1','key2':'value2'}
headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36','authority': 'search.bilibili.com'}
r=requests.get('https://blog.csdn.net/weixin_51852924?spm=1011.2124.3001.5343',params=k_dict,headers=headers)
print('url编码',r.url)
print('响应状态码',r.status_code)

结果:

url编码 https://blog.csdn.net/weixin_51852924?spm=1011.2124.3001.5343&key1=value1&key2=value2
响应状态码 200

这里可能你体会不到什么因为结果没什么变化,实际上有些网站会根据头信息判断反爬虫,没有头部信息的爬虫会被拦截拿不到任何信息。

3.设置超时

有时候爬虫会遇到服务器长时间不返回,这时候如果没有设置超时,爬虫就会一直等待。
在Requests中有一个timeout函数,可以设置超时,程序在timeout内没有应答就终止程序并返回异常。
异常内可能包含requests.exceptions.ConnectTimeout:
时间限制在timeout秒内,连接到某网站时间已到。

2.发送post请求

除了GET请求以外还有Post请求。因为有时需要发送一些编码为表单形式的数据,比如说在登陆的时候需要账号密码就是用post请求发送的,因为如果用get请求密码就会显示在URL中,这是极其不安全的。

比如上述代码的这一行就是用get发送的请求。

r=requests.get('https://blog.csdn.net/weixin_51852924?

那么如何实现post请求呢 ?把get改为post?No!No!No!
在介绍post请求之前 先向大家推荐一个网站

http://httpbin.org/#/

这个网站可以用来测试爬虫。

如果要实现post请求需要传递一个字典给requests中的data函数,这个数据就会在发出请求的时候自动编码为表单形式。

http://httpbin.org/#/这个是网站网址 想要测试post请求就在网址后面加上post

import requestsk_dict={'key1':'value1','key2':'value2'}
r=requests.post('http://httpbin.org/post',data=k_dict,timeout=5)
print(r.text)

其中,data=k_dict 是把表单信息传递过去
timeout=5 是设置了一个超时。
结果:

{"args": {}, "data": "", "files": {}, "form": {"key1": "value1", "key2": "value2"}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "23", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.24.0", "X-Amzn-Trace-Id": "Root=1-60ab8cec-23ead91523ee6f843804cb81"}, "json": null, "origin": "117.158.213.170", "url": "http://httpbin.org/post"
}

可以看见信息已经传递过去了


感谢

部分资料来源于书籍或者网络 在此表达由衷的感谢。
如有问题请留言。


http://chatgpt.dhexx.cn/article/e7UyDc0B.shtml

相关文章

网站抓取工具

经常由于某些原因我们需要爬取某一个网站或者直接复制某一个站点,到网上找了很多工具进行测试,试了很多各有各的问题,最终选择了Teleport Ultra,用起来效果很好;具体的操作手册等东西就不在这里说了,网上搜…

网页信息抓取

——看到社区里面好多人都有抓取网页信息的需要,特地把我自己做的DEMO放上来,供大家参考,也希望大家多提意见,共同学习完善这个小程序. 准备工具:Dreamweaver,RegexBuddy 抓取分3步进行: 1)下载网页数据; 2)处理网页得到想要的数据; 3)保存数据 一、下载网页源代码 …

网页抓取 - 完整指南

💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 介绍什么是网页抓…

使用 Python 进行网页抓取

如果您知道如何做到这一点,那么对于企业和个人使用来说,网络抓取似乎是一种非常有用的节省时间的工具。我们将重点介绍为什么您应该使用 Python 进行网页抓取,并为您提供有关如何完成它的快速教程,包括使用哪些Python 开发工具。 …

网页数据抓取工具 (谷歌插件 web Scraper)

最简单的数据抓取教程,人人都用得上 Web Scraper 是一款免费的,适用于普通用户(不需要专业 IT 技术的)的爬虫工具,可以方便的通过鼠标和简单配置获取你所想要数据。例如知乎回答列表、微博热门、微博评论、电商网站商品…

国内五大主流网站内容抓取工具/采集软件大盘点

大数据技术用了多年时间进行演化,才从一种看起来很炫酷的新技术变成了企业在生产经营中实际部署的服务。其中,数据采集产品迎来了广阔的市场前景,无论国内外,市面上都出现了许多技术不一、良莠不齐的采集软件。 今天,我…

排名前20的网页爬虫工具

网络爬虫在许多领域都有广泛的应用,它的目标是从网站获取新的数据,并加以存储以方便访问。而网络爬虫工具越来越为人们所熟知,因为它能简化并自动化整个爬虫过程,使每个人都可以轻松访问网络数据资源。 1. Octoparse Octoparse是一个免费且功能强大的网站爬虫工具,用于从网…

2020年30种最佳的免费网页爬虫软件

原文链接:2020年30种最佳的免费网页爬虫软件 网页抓取(也称为网络数据提取,网络爬虫,数据收集和提取)是一种网页技术,从网站上提取数据。将非结构化数据转换为可以存储在本地计算机或数据库中的结构化数据…

12款最常使用的网络爬虫工具推荐

网络爬虫在当今的许多领域得到广泛应用。它的作用是从任何网站获取特定的或更新的数据并存储下来。网络爬虫工具越来越为人所熟知,因为网络爬虫简化并自动化了整个爬取过程,使每个人都可以轻松访问网站数据资源。使用网络爬虫工具可以让人们免于重复打字…

推荐15款免费的网页抓取软件

网页抓取(也称为网络数据提取或网页爬取)是指从网上获取数据,并将获取到的非结构化数据转化为结构化的数据,最终可以将数据存储到本地计算机或数据库的一种技术。 网页抓取是通过抓取软件实现的。当你在使用浏览器如Chorme浏览页面…

IPMI22:ipmi——ipmitool使用

简介 ipmitool是一个实用程序,用于监视、配置和管理支持智能平台管理接口 (IPMI) 的工具,遵循ipmi协议。它是一个开源项目,项目官网:https://sourceforge.net/projects/ipmitool/,github地址:https://gith…

从入门到精通:IPMITool 的详尽指南

简介:分享一款非常实用的服务器管理工具——IPMITool。许多从事服务器管理的朋友可能已经对这款工具有所了解,但对于初入这个领域的朋友们,它可能仍然有些陌生。本文将带领你从了解IPMITool的基本概念开始,逐步深入到其实际应用中…

ipmitool常用命令详解

ipmitool命令 ipmitool –I [open|lan|lanplus] command OpenIPMI接口,command有以下项: raw:发送一个原始的IPMI请求,并且打印回复信息。 lan:配置网络(lan)信道(channel) chassis &#xf…

如何自己实现字符串拷贝函数

一般写法: char *my_strcpy(char *dst,const char *src) {assert(dst ! NULL);assert(src ! NULL);char *ret dst;while((* dst * src) ! \0) // 运算符优先级高于*;return ret; } 可以看到很简单,只需考虑三点。 1,判断源字符串和目的字…

C语言 字符串-字符串的复制

字符串复制函数: strcpy(目标字符串的首地址,被复制的字符串的首地址) 复制p到a: char * p"12345";char a[20];strcpy(a, p);printf("%s\n", a); strcpy_s(目标字符串的首地址,缓冲长度,被复制的字符串的首地址) strcpy_s(a, 20, p…

C语言 实现字符串的复制

1.将字符串a的数据复制到字符串b中 &#xff08;5.用for循环和指针来实现 &#xff09;------注释掉部分采用的是此方法 #include <stdio.h> int main() {void copy_string(char from[], char to[]);char a[]"I am a student.";//char a[11];//for (int i 0…

C语言的字符串复制

提示&#xff1a;仅供参考&#xff0c;如有错误&#xff0c;还望指出。 目录 目录 一、字符串复制 二、一些优化 1.一次简单优化 2.二次优化 3.三次优化 4.四次优化 5.最后的优化 总结 前言 以下是对字符串复制的一些优化 一、字符串复制 这是自己能想到的方法 主要…

不使用strcpy()函数实现字符串复制功能

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>int main() {/*不使用strcpy()函数实现字符串复制功能*/int i 0;char str1[100];char str2[100];printf("请输入字符串-> \n");gets(str1);while (str1[i] ! \0) /*判断字符数组的第一位不是结束符*/{st…

C语言字符串复制函数strcpy()的编写与详解

strcpy&#xff0c;即string copy&#xff08;字符串复制&#xff09;的缩写。 原型声明&#xff1a;char *strcpy(char *dest, const char *src); 头文件&#xff1a;#include <string.h> 和 #include <stdio.h> 功能&#xff1a;把从src地址开始且含有NULL结束符…

C语言函数库之字符串拷贝函数(string.h)

1.字符串拷贝函数strcpy 函数定义&#xff1a; char *strcpy(char *str1, const char *str2); 函数功能&#xff1a;把字符串str2(包括\0)拷贝到字符串str1当中&#xff0c;并返回str1。举例&#xff1a; #include<stdio.h> #include<string.h> int main(){char s…