requests库常用函数使用——爬虫基础(1)

简介: requests库常用函数使用——爬虫基础(1)

requests库常用函数使用——爬虫基础(1)


前言

       所有的前置环境以及需要学习的基础我都放置在【Python基础(适合初学-完整教程-学习时间一周左右-节约您的时间)】中,学完基础咱们再配置一下Python爬虫的基础环境【看完这个,还不会【Python爬虫环境】,请你吃瓜】,搞定了基础和环境,我们就可以相对的随心所欲的获取想要的数据了,所有的代码都是我一点点写的,都细心的测试过,如果某个博客爬取的内容失效,私聊我即可,留言太多了,很难看得到,本系列的文章意在于帮助大家节约工作时间,希望能给大家带来一定的价值。

示例环境

系统环境:win11

开发工具:PyCharm Community Edition 2022.3.1

Python版本:Python 3.9.6

资源地址:链接:https://pan.baidu.com/s/1UZA8AAbygpP7Dv0dYFTFFA 提取码:7m3e

MySQL:5.7,url=【rm-bp1zq3879r28p726lco.mysql.rds.aliyuncs.com】,user=【qwe8403000】,pwd=【Qwe8403000】,库比较多,自己建好自己的,别跟别人冲突。

学习目标:

requests库的使用方法是我们本节课的学习目标,但是为什么学它呢,因为Python自带的urllib库相对来说没有requests更为好用,特别是使用cookie的时候,故而我们后面爬取信息的时候都会去使用requests库。

环境下载:

打开cmd直接使用下面的下载语句即可,不过pip需要是最新的。

下载语句:【pip install requests】

如果不是最新的我们需要升级pip,我这里给了个流程,是先修改镜像地址为HUAWEI的地址,因为是国内的所以相对来说快些。

pip config set global.index-url https://repo.huaweicloud.com/repository/pypi/simple
pip config list
pip install -U pip

requests库位置:

例如:cookie的操作,我们可以直接保存浏览器中的cookie,使用【CookieJar】即可。

步骤1、先输出,根据输出保存一个【cookies.txt】文件

import http.cookiejar
import urllib.request
cookie = http.cookiejar.CookieJar()  # 必须声明一个CookieJar对象
handler = urllib.request.HTTPCookieProcessor(cookie)  # 用于处理Cookies,利用HTTPCookieProcessor来构建一个Handler
opener = urllib.request.build_opener(handler)  # 利用build_opener()方法构建出Opener
response = opener.open('输入你已经登录好的网站主页即可,注意这个主页的cookie已经可以查到。')  # 执行open()函数
# 输出了每条Cookie的名称和值
for item in cookie:
    print(item.name + '=' + item.value)

这是输出的Cookie样式

我们把这个输出内容保存到一个【cookies.txt】中。

步骤二、更换格式

import http.cookiejar
import urllib.request
# 这里是根据步骤1所保存的文件
filename = 'cookies.txt'
cookie = http.cookiejar.MozillaCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('还是你的网站')
cookie.save(ignore_discard=True, ignore_expires=True)

格式类似于这样

步骤三、#LWP-Cookies-2.0格式

import http.cookiejar as cookielib
import http
import urllib
filename = 'cookies.txt'
cookie = http.cookiejar.LWPCookieJar(filename)  # LWPCookieJar同样可以读取和保存Cookies,它会保存成libwww-perl(LWP)格式的Cookies文件。
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('https://blog.csdn.net/feng8403000')
cookie.save(ignore_discard=True, ignore_expires=True)

这里只是个示例,是否测试都一样。

演示代码

实验前提,项目创建的时候我们选择系统库的位置。

使用系统库我们就能在cmd下载完成后直接导入到项目中,可以大大的节约咱们的项目所占空间。

requests基本使用

引入【requests库】,我们下载完成后直接使用【import requests】引入即可。

requests基础请求

这里使用【requests.request】来做测试。

请求的方式有七种:get、post、put、delete、delete、patch、options。

请求效果:

我们一般不使用这里请求,我也不是很喜欢用,我一般就直接使用get/post的方式直接访问了,免得单独输入一遍,一共七种方式都可以直接使用。

requests请求测试

基础请求我们使用get就行,get请求相对来说所有的链接都能直接使用浏览器打开,测试起来很方便,因为如果使用post你在测试的时候需要使用工具进行模拟测试。但是我们如果传递了data就不需要传递params了。

示例代码:

import requests
url = "http://japi.juhe.cn/qqevaluate/qq"
data = {"qq": "372699828",
        "key": "输入自己的key"}
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
}
html = requests.get(url, data, headers=headers)
print(html.content.decode("utf-8"))

测试成功

我们在基础的测试中一共传递了三个参数,第一个参数是访问链接的字符串,第二个我们传递了data就不需要传递params了,第三个是传递的请求头,这里一定要添加请求头,否则很多接口是无法正常访问的。

headers解析

在请求网页爬取的时候,输出的返回信息中会出现抱歉,无法访问等字眼,这就是禁止爬取,需要通过反爬机制去解决这个问题。

headers是解决requests请求反爬的方法之一,相当于我们进去这个网页的服务器本身,假装自己本身在爬取数据,如果有IP代理器那就更好了。

对反爬虫网页,可以设置一些headers信息,模拟成浏览器取访问网站 。

headers位置

F12打开->网络->找到主页->查看标头->查看请求标头,这就是我们的请求头,一般我们添加【user-agent】就行,赋值的时候不需要赋值【:】开头的那几个。

复制后有一些符号其实我们不会用,所以我们需要替换一下,下面是替换代码,我这里没有复制【:】开头的那几个。

import re
# 下方引号内添加替换掉请求头内容
headers_str = """
accept: application/json, text/javascript, */*; q=0.01
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9
content-type: application/json
origin: https://blog.csdn.net
referer: https://blog.csdn.net/feng8403000?spm=1001.2101.3001.5343
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-site
user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
"""
pattern = '^(.*?):(.*)$'
for line in headers_str.splitlines():
    print(re.sub(pattern, '\'\\1\':\'\\2\',', line).replace(' ', ''))

requests返回结果

返回字符串

import requests
html = requests.request("get", "https://www.baidu.com")
print(html.text)

这里返回的字符串格式是有问题的,我们能看到编码格式有问题。

修改返回字符串编码格式

我们直接使用.content.decode来修改编码,这个具体的编码我们需要根据实际来修改可能是GBK也可能是utf-8。

import requests
html = requests.request("get", "https://www.baidu.com")
print(html.content.decode("utf-8"))  # 我们直接使用.content.decode来修改编码,这个具体的编码我们需要根据实际来修改可能是GBK也可能是utf-8

可以看到,现在的编码格式就没有问题了。

响应结果涉及函数

我这里将常用的函数都举例出来了,我们可以根据我们的需求进行选用。

import requests
html = requests.request("get", "https://www.baidu.com")
# 输出返回类型与结果
print(type(html.text), "\n输出前200字符串做测试:", html.text[0:200], "\n")
# 响应内容(bytes类型)
print(type(html.content), "\n输出前200字符串做测试:", html.content[0:200], "\n")
# 状态码
print(type(html.status_code), "\n输出状态码:", html.status_code, "\n")
# 响应头
print(type(html.headers), "\n输出响应头:", html.headers, "\n")
# Cookies
print(type(html.cookies), "\n输出Cookies:", html.cookies, "\n")
# URL
print(type(html.url), "\n输出路径:", html.url, "\n")

对应的六个输出:

文件保存

这里我们先保存一个ico文件测试。

import requests
# 这里保存平台的图标
html = requests.request("get", "https://g.csdnimg.cn/static/logo/favicon32.ico")
# 图标保存示例
with open("csdn.ico", "wb") as file:
    file.write(html.content)
    print("保存完毕,并通过with关闭file流。")

保存效果:

基础HTML格式访问成功后我们去试试json。

返回json

我们返回的数据直接json进行格式化,格式化的数据是json数据类型的,可以直接进行json操作。

我们可以通过在F12中查找到我们需要的json接口来进行信息的获取,方便很多。

https证书异常

import requests
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
}
html = requests.get('https://www.12306.cn', headers=headers, verify=False)
print(html.status_code)

这里能看到虽然是200,但是报错【Unverified HTTPS】 也就是证书有问题了。

由于没有证书故而报这个错。

import logging
import requests
# 我们过滤一下就好了
logging.captureWarnings(True)
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
}
response = requests.get('https://www.12306.cn', headers=headers, verify=False)
print(response.status_code)

我们直接过滤一下这个异常提示就行了:

动态IP代理

这里主要就是设置:【proxies】的值,配置到requests的访问上就能改变请求的ip与端口号了。

headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
    }
autoId = "42.54.83.73:39050"
proxies = {
        'http': autoId,
        'https': autoId
    }
html = requests.get(readUrl, headers=headers, proxies=proxies)

代理效果:

总结:

       本文章我们把整个requests常用的函数都讲解过了,其实没有说的就是超时设置了,超时设置就是timeout的设置,我们可以设置一个元组是时间范围,例如:(5,30)这是5~30秒,如果超过30s后就会显示超时。

       我们将本文章的常用内容掌握之后基本的访问是没有什么问题了,如果是post的接口我们直接将get改成post即可。希望孩子们能用心搞定这个库的知识,会对后面的获取数据有很大的帮助。

相关文章
|
2月前
|
数据采集 JavaScript 前端开发
实用工具推荐:适用于 TypeScript 网络爬取的常用爬虫框架与库
实用工具推荐:适用于 TypeScript 网络爬取的常用爬虫框架与库
|
3月前
|
数据采集 前端开发 JavaScript
Python爬虫 pyquery库详解#4
pyquery 初始化,基本CSS选择器,查找节点,遍历,节点操作,伪类选择器【2月更文挑战第15天】
30 1
Python爬虫 pyquery库详解#4
|
8天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
15 0
|
2月前
|
数据采集 存储 数据可视化
介绍一下常见的爬虫框架或库,如`Scrapy`。
【2月更文挑战第22天】【2月更文挑战第70篇】介绍一下常见的爬虫框架或库,如`Scrapy`。
|
2月前
|
数据采集 存储 JavaScript
PHP爬虫技术:利用simple_html_dom库分析汽车之家电动车参数
本文旨在介绍如何利用PHP中的simple_html_dom库结合爬虫代理IP技术来高效采集和分析汽车之家网站的电动车参数。通过实际示例和详细说明,读者将了解如何实现数据分析和爬虫技术的结合应用,从而更好地理解和应用相关技术。
PHP爬虫技术:利用simple_html_dom库分析汽车之家电动车参数
|
2月前
|
数据采集 存储 JSON
解析Perl爬虫代码:使用WWW::Mechanize::PhantomJS库爬取stackoverflow.com的详细步骤
在这篇文章中,我们将探讨如何使用Perl语言和WWW::Mechanize::PhantomJS库来爬取网站数据。我们的目标是爬取stackoverflow.com的内容,同时使用爬虫代理来和多线程技术以提高爬取效率,并将数据存储到本地。
|
3月前
|
数据采集 开发框架 监控
Wt库网络爬虫技术与央行降息的完美结合:实战案例分析
Wt库网络爬虫技术与央行降息的完美结合:实战案例分析
|
3天前
|
数据采集 XML 数据处理
使用Python实现简单的Web爬虫
本文将介绍如何使用Python编写一个简单的Web爬虫,用于抓取网页内容并进行简单的数据处理。通过学习本文,读者将了解Web爬虫的基本原理和Python爬虫库的使用方法。
|
18天前
|
数据采集 存储 API
网络爬虫与数据采集:使用Python自动化获取网页数据
【4月更文挑战第12天】本文介绍了Python网络爬虫的基础知识,包括网络爬虫概念(请求网页、解析、存储数据和处理异常)和Python常用的爬虫库requests(发送HTTP请求)与BeautifulSoup(解析HTML)。通过基本流程示例展示了如何导入库、发送请求、解析网页、提取数据、存储数据及处理异常。还提到了Python爬虫的实际应用,如获取新闻数据和商品信息。
|
22天前
|
数据采集 Python
【python】爬虫-西安医学院-校长信箱
本文以西安医学院-校长信箱为基础来展示爬虫案例。来介绍python爬虫。
【python】爬虫-西安医学院-校长信箱