Python “爬虫“出发前的装备之二数据先行( Requests 模块)

Python 网络爬虫高阶用法 通过学习本文的内容,读者应掌握 Python 网络爬虫的高级用法,并能够应对反爬虫机制、抓取动态网页、实现分布式和异步爬虫。网络爬虫技术在数据抓取、信息采集等方面有着广泛的应用,掌握这些技能将大大提升数据处理和分析的效率。 阅读详情

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475

1. 概念

爬虫不是动物,而是一种计算机程序。

这种程序有自己特定的功能,能按照使用者给定的一系列规则自行浏览万维网并获取需要的信息。此类程序被称为 网络爬虫(web crawler)网络蜘蛛(spider)
它具有智能分析能力,也称为 机器人程序

爬虫的应用应用领域:

如百度、谷歌等以搜索为主的公司,就是利用其自行研发的爬虫程序在互联网上对网页中的数据进行爬取、分析、归类、存储……再提供给用户使用。
新闻聚合应用也是利用爬虫程序爬取各新闻网站上的新闻信息,进行分检归类后提供给使用者。

爬虫程序可运用于各种需要数据分析的应用领域。如价格分析,根据商品关键字爬取各商城中商品价格,对价格进行比较、分析后展示给用户一个直观的对比表。

爬虫程序从网络上爬取数据时,需要遵守 Rebots 协议。

Rebots 协议是网站拟定的资源共享清单,规定爬虫在本网站爬取数据时,哪些资源可以爬取,哪些资源不可以爬取。

爬虫程序的工作流程:

  1. 确定目标网页。此页为起始页或叫入口页面
  2. 获取页面的数据,通过某种方式(如正则表达式)获取页面中的相关信息。并可提取页面中链接,以递归方式继续对页面数据进行分析,提取。
  3. 将信息持久化存储,可备后续的处理。

2. Python 爬虫模块

爬虫程序的核心逻辑之一便是通过网络请求模式,下载指定页面的数据。

爬虫程序的本质就是一个网络应用程序

Python 提供了丰富的库或模块可协助开发者快速开发此类网络应用程序。

2.1 urllib 库

urllib 库是 python 内置库,不需要另外安装。完整的 urllib 库包括如下 5 大模块:

  • urllib.request :可使用不同的协议发送请求包并获取请求之后的响应结果。
  • urllib.response :用来解析响应包数据。
  • urllib.error: 包含了 urllib.request 产生的异常。
  • urllib.parse: 用来解析和处理 URL。
  • urllib.robotparse: 用来解析页面的 robots.txt 文件。

使用 urllib.request 模块发送网络请求:

import urllib.request
# 基于 https 协议的 url 地址
url = "https://blog.csdn.net/guo-ke/p/15951196.html"
# 构建一个请求对象
req = urllib.request.Request(url)
# 使用 urlopen 方法发送请求包
with urllib.request.urlopen(req) as resp:
    # 解析数据
    data = resp.read()
    print(data.decode())

  1. urllib.request.Request() 类说明:构建请求包。

类原型声明:

class Request:
   def \_\_init\_\_(self, url, data=None, headers={},origin\_req\_host=None, unverifiable=False,method=None):
           #…… 其它代码块

构造方法参数说明

  • **url:**要请求的 url 。
  • **data:**data 必须是bytes(字节流)类型,如果是字典,可以用 urllib.parse 模块里的 urlencode( ) 编码
  • **headers:**headers 是一个字典类型,用来描述请求头信息。

可在构造方法中指定,也可以通过调用 add_header( ) 方法添加

默认 User-AgentPython-urllib

  • **origin_req_host:**指定请求方的 host 名称或者 ip 地址。
  • unverifiable:设置网页是否需要验证,默认是 False。
  • **method:**用来指定请求使用的方法,如 **GET、POST 或 PUT ** 等。

很多网站具有反爬虫设置,除了浏览器之外的访问均认定为非法请求。所以爬虫程序需要把自己伪装成浏览器。

from urllib import request, parse

url = 'http://www.guo-ke.com/post' 
headers = {
    # 伪装成谷歌浏览器
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36',
	'Host': 'guo-ke.org'
}
dict = {
	'name': 'guoke',
    'key':'python'
}
# 数据必须是字节流
data = bytes(parse.urlencode(dict), encoding='utf8')
'''
# 转换成 URL 格式的字符串
data = parse.urlencode(dict)
# 编码成字节流数据
data = data.encode()
'''
request = request.Request(url=url, data=data, headers=headers, method='POST')
# req.add\_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36')
with  request.urlopen(req) as response:
    res=(response.read()
	print(res.decode('utf-8'))

**Tip:**当使用了 data 参数或指定 method=“POST” 则为POST 请求。

GET 请求也能附加请求参数:https://www.baidu.com/s?wd=java

  1. urllib.request.urlopen( ) 方法说明:发送网络请求。
def urlopen(url, data=None, timeout=socket.\_GLOBAL\_DEFAULT\_TIMEOUT,
 *, cafile=None, capath=None, cadefault=False, context=None):

参数说明:

  • url: 可以接收一个 URL 字符串 或一个 urllib.request.Request 对象
  • data: POST 请求的数据,GET 请求设置为 None。
  • timeout: 设置网站的访问超时时间。仅仅用于使用 HTTP、HTTPS、FTP 协议请求连接时。
  • cafile、capath: 当使用 HTTPS 请求时,用来指定 CA 数字证书。

cafile 指定数字证书文件。

capath 指定包含的数字认证文件的目录。

**返回类型说明:**无论使用何种协议发送请求后返回的对象都会包括 3 个通用方法。

  • geturl( ) 返回请求的资源URL。
  • info( ) 返回元数据信息,如消息头。
  • getcode( ) 返回响应的状态码. 如果有错误则会抛出 URLError 异常。

当使用 httphttps 协议请求后返回的是一个 http.client.HTTPResponse 对象,此对象除了上面的 3 个方法,还包括:

  • read( ): 获取响应返回的 bytes 类型数据,只能使用一次,输出时需要使用 decode() 解码。
  • getheaders( ): 获取返回的响应头信息。

使用 urllib.request 下载一张图片:

爬虫程序强大之处在于能批量、递归下载用户所需要的数据,一个强大的逻辑背后的思想可能就是一个简单的原理支撑的。我们可以先试着下载一张图片以小窥大。

import urllib.request

# 图片URL
url = "https://img2022.cnblogs.com/blog/2749732/202202/2749732-20220222195931956-448995015.jpg"
with urllib.request.urlopen(url) as resp:
    data = resp.read()
    with open("d:/my\_file.jpg", "wb") as f:
        f.write(data)

打开对应盘符,可以查阅到图片已经下载成功。

urllib.request 还提供有一个更方便的 urlretrieve( ) 方法。可直接以文件方式存储下载下来的字节流数据。

from urllib import request
url = "https://img2022.cnblogs.com/blog/2749732/202202/2749732-20220222195931956-448995015.jpg"
# urlretrieve() 方法传入的第二个参数为文件保存的位置,以及文件名。
request.urlretrieve(url, 'd:/temp.jpg')

2.2. requests 库

requests 是基于urllib 编写的第三方库,使用时,需要下载安装:

pip3 install requests

主要提供了 2 个方法:

1. get( ) 方法用来发送 GET 请求。

def get(url, params=None, **kwargs):
    #……

参数说明:

  • url:字符串类型的需要请求的 url 资源。
  • params:查询数据,可以是字典、列表、元组、字节类型
  • kwargs:选项参数

基本 GET 使用:

import requests

# 用get方式发送请求并获得响应
response = requests.get('https://blog.csdn.net/guo-ke/p/15925214.html')
# 用text查看响应内容
print(response.text)

带参数 get 请求

import requests

response = requests.get('https://www.baidu.com/s?wd=java')
# 将参数拼接到url后面,用问号分隔,参数间用&来分隔
print(response.text)

字典格式的参数

import requests

data = {
    'wd': 'java'
}
response = requests.get('https://www.baidu.com/s', params=data)
# 用字典的形式传递给params参数,不需要自己写url编码
print(response.text)

GET 方法返回一个 Responese 对象,此对象提供有相应属性或方法解析响应包中的数据。

  • response.encoding:获取当前的编码。
  • response.encoding = ‘utf-8’:设置编码。
  • response.text:自动根据响应头部的字符编码进行解码。
  • response.content:以字节形式(二进制)返回。
  • response.headers:以字典对象存储服务器响应头,字典键不区分大小写,若键不存在则返回 None。
  • response.status_code:响应状态码。
  • response.raw:返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read()
  • response.json() :Requests 中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常。

下载一张图片

import requests
#;图片地址
url = "https://img2022.cnblogs.com/blog/2749732/202202/2749732-20220222195931956-448995015.jpg"
#请求头元数据
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10\_13\_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
}
response = requests.get(url, headers=headers)
# 获取字节流数据
data = response.content
#保存字节流数据
with open("d:/test.jpg", "wb") as f:
    f.write(data)

2. post() 方法:以 post 方式发送请求

def post(url, data=None, json=None, **kwargs):

参数说明:

  • url:字符串类型的需要请求的 url 资源。
  • data:数据,可以是字典、列表、元组、字节类型
  • json:json 格式的数据。
  • kwargs:请求头选项。

基本使用方式

import requests

data={'name':'zhuzhu','age':'23'}
headers={
 'User-Agent':'Mozilla/5.0(Macintosh;Intel Mac OS X 10\_11\_4)AppleWebKit/537.36(KHTML,like Gecko)Chrome/52.0.2743.116 Safari/537.36'
}
response=requests.post("http://httpbin.org/post",data=data,headers=headers)
#数据必须是json 封装
print(response.json())

3. 总结

requests 在基于 urllib 编写的第三方库,相比较 urllib 使用起来更简单。对其 API 介绍 ,本文只做了些简单描述。更多方法或使用可查阅文档。

Python 网络爬虫进阶教学全指南 本次博客将深入探究 Python 网络爬虫的核心知识与实用技巧,引领大家从入门迈向精通 阅读详情

相关推荐

Python-网络爬虫

网络爬虫(Web Spider)又称网络蜘蛛或网络机器人,是一段用来实现自动采集网站数据的程序。网络爬虫不仅能够为搜索引擎采集网络信息,而且还可以作为定向信息采集器,定向采集某些网站中的特定信息。对于定向信息的爬取,网络爬虫主要采取数据抓取、数据解析、数据入库的操作流程。(1)数据抓取:发送构造的HTTP请求,获得包含所需数据的HTTP响应;(2)数据解析:对HTTP响应的原始数据进行分析、清洗,以提取出所需要的数据;(3)数据入库:将数据进一步保存到数据库(或文本文件)中,用于构建知识库。

qq_42759120的博客 1663

python使用requests发送https请求报错check_hostname requires server_hostname

最近发现使用requests发送https请求时报错,运行代码: import requests response=requests.get('https://www.baidu.com/', verify=False) print(response.text) 报错信息: 在尝试降低requests版本无果后,使用pip install urllib3==1.25.11降低依赖的urllib版本: 再次运行,成功返回结果: 附:在安装requests时默认安装的urllib3版本是更高的版本 参

weixin_38179939的博客 2699

Python 网络爬虫入门与实战

网络爬虫(Web Crawler)是自动访问网络并提取信息的程序。它可以模拟人类用户在浏览器中的行为,访问网页、抓取数据并存储到本地或数据库中。网络爬虫在信息检索、数据挖掘、搜索引擎等领域有广泛应用。Scrapy 是一个强大的爬虫框架,支持异步处理和数据存储。它适合大型爬虫项目,可以高效抓取和解析数据。yield item通过本文的学习,您应该对 Python 网络爬虫有了全面的了解。从基础的 Requests 库到高级的 Scrapy 框架,再到实战案例,涵盖了网络爬虫的方方面面。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 2169

import requests

requestspython实现的简单易用的HTTP库,使用起来比urllib简洁很多 因为是第三方库,所以使用需要cmd安装 pip install requests 安装完成后import一下,正常则说明可以开始使用了。 基本用法: requests.get()用于请求目标网站,类型是一个HTTPresponse类型 import requests response = requests...

hwcseo的博客 9663

【21天Python进阶学习挑战赛】[day15]requests库大总结

ptyhon-requests

一气道盟王富贵儿 4388

Python接口自动化-requests模块之post请求

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你进的路上带来帮助。

2301_77645834的博客 2182

爬虫基本请求库的使用()requests

requests的get方法: import requests r = requests.get('https://www.baidu.com/') print(type(r)) print(r.status_code) print(type(r.text)) print(r.text) print(r.cookies) 分别输出了Response的类型 状态码 响应体的类型 内容以及Cook...

人生苦短,我用python 836

网络爬虫是什么?怎么学python爬虫

网络爬虫又称网络蜘蛛、网络机器人,它是一种按照一定的规则自动浏览、检索网页信息的程序或者脚本。网络爬虫能够自动请求网页,并将所需要的数据抓取下来。通过对抓取的数据进行处理,从而提取出有价值的信息。

Itmastergo的博客 3万+

【论文投稿】Python 网络爬虫:探秘网页数据抓取的奇妙世界

在当今数字化信息呈爆炸式增长的时代,网络爬虫宛如一把神奇的钥匙,开启了通往海量数据宝藏的大门。无论是商业领域的市场情报搜集、科研工作中的资料聚合,还是个人兴趣驱动下的信息整合,网络爬虫都展现出了无与伦比的价值。今天,就让我们一同走进 Python 网络爬虫的精彩世界,探索其中的奥秘。Python 网络爬虫为我们打开了一扇通往无限数据世界的大门,在商业、科研、生活等各个领域释放出巨大能量。通过掌握requestsScrapy等核心工具和框架,我们能够披荆斩棘,克服重重挑战,从网页的海洋中挖掘出珍贵的数据宝藏。

来自想要赚大钱的小周同学 9442

小白学Python,网络爬虫篇(1)——requests

网络爬虫通俗来讲就是使用代码将 HTML 网页的内容下载到本地的过程。爬取网页主要是为了获取网页中的关键信息,例如网页中的数据、图片、视频等。Python 语言中提供了多个具有爬虫功能的库,下面将具体介绍。urllib 库:是 Python 自带的标准库,无须下载、安装即可直接使用。urllib 库中包含大量的爬虫功能,但其代码编写略微复杂。requests 库:是 Python 的第三方库,需要下载、安装之后才能使用。

2201_75607087的博客 3225

Python网络爬虫

网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。通俗来讲,网络爬虫就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做。

zgl040803的博客 2621

Python接口自动化之浅析requests模块post请求

一、源码解析 def post(url, data=None, json=None, **kwargs): r"""Sends a POST request. :param url: URL for the new :class:`Request` object. :param data: (optional) Dictionary, list of tuples, bytes, or file-like object to send in the body of

修罗神的海岛 598

python requests_python爬虫教程:requests

一、言: 大家好,我是小白菜,从现在开始为大家带来爬虫教程的分享。由于最近临近考试,所以更新文章的进度会变慢点,请谅解。今天的主题是requests库的学习与使用。觉得写的还不错的朋友们可以点点赞支持,谢谢。二、requests库:这里在面补充说明一点,有一个网站,在我们测试代码的时候比较常用,因为这个网站返回的信息可以让我们清楚的意识到自己的爬虫加了什么参数,返回了什么内容。这个网...

weixin_39602108的博客 250

python requests 模块

requests模块 requests模块介绍 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。 requests模块作用 发送http请求,获取响应数据 安装pythonjar包 pip install req...

joker 1273

Python网络爬虫:通过requests库实现HTTP请求和响应

Python中的requests库是一个强大而流行的第三方库,可以用来发送HTTP请求和处理HTTP响应。该方法会返回一个 Response 对象,我们可以根据需要对其进行处理,比如获取响应文本、二进制数据、JSON数据等等。我们只需要在Python脚本中引入requests库,然后就可以使用其中的各种方法来实现我们所需的网络请求。与 GET 请求不同,POST 请求需要发送一些数据到服务器。在requests库中,我们可以使用 post() 方法来发送 POST 请求,并将数据作为参数传递给该方法。

qq_37934722的博客 935

python接口测试声音,Python接口测试之Requests

RequestsPython语言的第三方的库,专门用于发送HTTP请求。在Python语言中,虽然提供了urllib2和urllib的库,但是相比较而言,Requests任然是实现接口测试最好的选择,因为它是用起来更加简便。在这里重点介绍Requests中POST请求方法中请求参数data和请求参数jaon的区别,以及在实际工作中应用时的注意事项。见POST请求的源码:def post(url,...

weixin_36013931的博客 197

Python 接口测试requests.post方法中data与json参数区别

  引言   在随笔分类Jmeter入门基础中,分享过一篇《Jmeter处理http请求Content-Type类型和传参方式》,这篇文章主要讲述Jmeter做接口测试时,针对POST请求参数的传递方式。而在使用requests做接口测试的时候,与之不太一样。requests.post主要参数是data与json,这两者使用是有区别的,下面我详情的介绍一下使用方法。   Requests...

像蚂蚁一样工作,像蝴蝶一样生活 1万+
上一篇: Linux性能优化实战CPU篇之软中断(三)
下一篇: 聊聊第一个开源项目(内网穿透) - CProxy
pythonxxoo
博客等级 码龄5年 337粉丝 670原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值