五,网页抓取

8 篇文章 26 订阅
3 篇文章 0 订阅


前言

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


一、Requests库的使用

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

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

pip install requests

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

import requests

r=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 requests

k_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 requests

k_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 requests

k_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"
}

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


感谢

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

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
URLHelper是一个用于处理URL的辅助工具,它可以帮助我们方便地进行网页抓取和数据提取。下面是一个简单的URLHelper抓取教程。 第一步,安装URLHelper库。可以通过pip或conda安装URLHelper库,例如使用pip安装的命令为:pip install urlhelper。 第二步,导入URLHelper库。在使用URLHelper之前,需要先在项目中导入该库,可以使用import语句导入URLHelper库,例如:import urlhelper。 第三步,创建URLHelper实例。在使用URLHelper之前,需要创建一个URLHelper的实例,用于进行URL的处理和数据的提取。可以使用URLHelper类的构造函数创建实例,例如:helper = urlhelper.URLHelper()。 第四步,设置URL和参数。在使用URLHelper获取网页内容之前,需要设置URL和参数。可以使用set_url和set_params方法设置URL和参数,例如:helper.set_url("http://www.example.com") 和helper.set_params({"page": 1, "limit": 10})。 第步,发送请求并获取响应。使用send_request方法发送请求并获取响应内容,例如:response = helper.send_request()。 第六步,解析网页内容。可以使用parse_response方法解析网页内容,例如:parsed_data = helper.parse_response(response)。 第七步,提取所需数据。根据网页的结构和需要提取的数据,可以使用XPath、CSS选择器或正则表达式等方法提取所需数据,例如:title = parsed_data.xpath('//h1/text()')。 第八步,处理提取的数据。根据需求,可以对提取的数据进行处理和存储,例如打印在控制台上或将数据存储到数据库中。 通过以上步骤,我们可以使用URLHelper方便地进行网页抓取和数据提取。当然,在实际应用中还需要根据具体情况进行处理和调试,但这个简单教程可以作为URLHelper入门的指导。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁六加.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值