Python爬虫(requests模块使用)

目录

requests发送get请求

requests响应对象

练习-爬取多个图片

requests请求时设置请求头

requests发送POST请求

requests使用代理

requests请求携带Cookie

requests中cookiejar处理

案例:百度贴吧爬虫

案例:黑马论坛爬虫

案例:豆瓣top250




requests发送get请求

#requests模块安装
pip install requests



# 1. 导入request模块
import requests

# 2. 准备目标url地址
url = 'https://www.baidu.com'

# 3. 向目标url地址发送get请求
response = requests.get(url)

# 4. 打印响应内容
print(response.text)

requests响应对象


# 1. 导入request模块
import requests

# 2. 准备目标url地址
url = 'https://www.baidu.com'

# 3. 向目标url地址发送get请求
response = requests.get(url)

# 4. 打印响应内容
# print(response.text)
print(response.content.decode())


'''

response.content

返回类型: bytes
解码类型: 没有指定,原始响应内容,没有进行解码
指定编码方式: response.content.decode('指定编码字符集')
注意: response.content.decode() 默认使用 utf-8 编码方式
response.text

返回类型: str
解码类型: requests 模块自动根据 HTTP 头部对响应的编码作出有根据的推测,推测的文本编码
response.text = response.content.decode('推测出的编码字符集')
获取网页源码的方式:

response.content.decode()
response.content.decode('gbk')
response.text
以上三种方法从前往后尝试,能够100%的解决所有网页解码的问题, 推荐优先使用: response.content.decode()'

'''



'''
response.url : 响应的url地址,有时候响应的 url 地址和请求的 url 地址不一样。
response.status_code : 获取响应状态码。
response.request.headers : 获取响应对应的请求头信息。
response.headers : 获取响应头信息。
response.request._cookies : 响应对应请求携带的cookie,返回cookieJar类型。
response.cookies : 响应时设置的 cookie,返回cookieJar类型。
response.json() : 自动将 json 字符串类型的响应内容转换为 python 对象(dict or list)
'''
# 1. 导入request模块
import requests

# 2. 准备目标url地址
url = 'https://www.baidu.com'

# 3. 向目标url地址发送get请求
response = requests.get(url)

# 4. 打印响应内容
print(response.url)                            # 打印响应的url
print(response.status_code)                    # 打印响应的状态码
print(response.request.headers)                # 打印响应对象的请求头
print(response.headers)                        # 打印响应头
print(response.request._cookies)               # 打印请求携带的cookies
print(response.cookies)                        # 打印响应设置的cookies

练习-爬取多个图片

#re模块后续学习,先了解
import re
import requests

"""
思路
一. 先请求 https://www.tupianzj.com/meinv/20201029/219412.html,获取响应内容
二. 从上一步的响应内容中提取所有图片的地址
三. 遍历每一个图片地址,向每个图片地址发送请求,并将响应的内容保存成图片文件
"""

"""一. 先请求 https://www.tupianzj.com/meinv/20201029/219412.html,获取响应内容"""
# 1.1 准备URL地址
url = 'https://www.tupianzj.com/meinv/20201029/219412.html'

# 1.2 发送请求
response = requests.get(url)

# 1.3 获取响应的内容
html_str = response.content.decode('gbk')
# print(html_str)

"""二. 从上一步的响应内容中提取所有图片的地址"""
# 2.1 获取所有URL信息
image_url_list = re.findall('<img src="(.*?)"', html_str)
# 2.2 去除最后无效地址
image_url_list = image_url_list[:-1]
print(image_url_list)


"""三. 遍历每一个图片地址,向每个图片地址发送请求,并将响应的内容保存成图片文件"""
for image_url in image_url_list:
    # 发送请求
    image_response = requests.get(image_url)

    # 将响应内容保存成本地图片
    filename = image_url[-10:]
    with open(filename, 'wb') as f:
        f.write(image_response.content)


print('保存图片完毕!!!')

requests请求时设置请求头

#请求头语法
response = requests.get(url,headers={})
'''
headers 参数接收的字典形式的请求头
请求头字段名作为字典的 key,字段名对应的值作为字典的 value。
'''

#完整代码实现
import requests



#准备url地址
url = 'https://www.baidu.com/s?'

#准备查询参数
params = {
    'wd':'东京奥运'
}



#准备请求头,慢慢调试,referer不行尝试cookie或者accept
headers= {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0',  #字典分隔符","后面有参数记得加
    'Referer':'https://www.baidu.com'
    # 'Cookie':'BAIDUID=E2E375AD19217D927B4950F9491E4B4B:FG=1;'
    #'Accept':
}

response = requests.get(url,params=params,headers=headers)

#打印响应内容
print(response.content.decode())


#获取响应内容
# with open('0101.html','wb',encoding='utf8') as file:
#     file.write(response.content.decode())

requests发送POST请求

#POST请求语法
response = requests.post(url,data={},headers={},params={})
'''
data参数接收的数据类型是字典。
POST请求体(form data)中,冒号左边的作为字典的 key,冒号右边的作为字典的 value。
'''

案例代码()
import requests

# 1. 准备登录的url地址,请求头,请求体数据
login_url = "http://manager-health-java.itheima.net/login.do"



headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
    "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36"  #字典分隔符","后面有参数记得加
    #"Referer":
    #"Cookie":
    #"Accept"
}

data = {
    "username": "admin",
    "password": "admin"
}

# 2. 发起登录请求,get请求没有data
response = requests.post(login_url, data=data, headers=headers)

# 打印登录成功之后的响应状态码和响应的内容
#爬虫具有页面重定向能力
print(response.status_code)
print(response.content.decode())

 

requests使用代理

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzOTY2MjM2,size_16,color_FFFFFF,t_70

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzOTY2MjM2,size_16,color_FFFFFF,t_70

#使用代理基本语法:  response = requests.get(url,proxies={})
#proxies参数接收的数据类型为字典

'''
字典格式如下:

proxies = {
    "协议类型": "协议类型://代理IP地址:端口号"
}

例如:
proxies = {
  # 目标地址为 http 协议,会使用 http 这个 key 对应的代理服务
  "http": "http://113.121.255.26:9999",
  # 目标地址为 https 协议,会使用 https 这个 key 对应的代理服务
  "https": "https://219.151.157.130:3128"
}
'''
#案例-使用代理ip请求唱吧
# 1. 导入request模块
import requests

# 2. 准备目标url地址
url = 'http://changba.com/now/stars/index.html'
# 准备请求头字典
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36"
}
# 准备代理IP的字典
proxies = {
    'http': 'http://113.108.190.50:8080'
}

# 3. 向目标url地址发送get请求
response = requests.get(url, headers=headers, proxies=proxies)

# 4. 打印响应的内容
print(response.content.decode())

requests请求携带Cookie 

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzOTY2MjM2,size_16,color_FFFFFF,t_70

##掌握(使用requests.session携带Cookie)
'''
使用方式:
session = requests.session() #实例化session类对象
response = session.get(url,headers,...)
response = session.post(url,headers,...)
#session对象发送get或post请求的参数,与requests模块发送的请求的参数完全一致
'''


'''
案例
登录页面 url 地址: http://manager-health-java.itheima.net/login.html
先抓包获取到登录传智健康的登录 url 地址,以及登录需要的参数
先使用 request.session 完成登录,获取登录之后的 cookie
在使用 request.session 对象请求登录之后的页面。
'''
示例代码
import requests

# 1. 准备登录的url地址(抓包获取到的登录的post url地址)
login_url = "http://manager-health-java.itheima.net/login.do"

# 准备请求头User-Agent
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
}
# 准备请求体字典
data = {
    "username": "admin",
    "password": "admin"
}

# 2. 创建session对象,会自动保存和携带Cookie
session = requests.session()

# 3. 使用session对象发送post请求 登录传智健康
session.post(login_url, headers=headers, data=data)

# 使用 session对象再次请求登录之后的url地址 请求登录之后的页面的地址
url = "http://manager-health-java.itheima.net/pages/main.html"

# 发送请求 获取响应
response = session.get(url, headers=headers)

# 4. 打印响应内容
print(response.content.decode())







#以下方法理解
'''
从浏览器中复制User-Agent和Cookie
浏览器中的请求头字段和值与headers参数中必须一致
headers请求参数字典中的Cookie键对应的值是字符串
'''
import requests

# 1. 准备目标url地址
url = 'http://manager-health-java.itheima.net/pages/main.html'

# 2. 准备请求头信息,cookie  和 User-Agent,(从浏览器抓包复制)
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36",
    "Cookie": "JSESSIONID=4BBDB822771C712E3570B8AD3BED780F"
}

# 3. 发送请求,获取响应数据
response = requests.get(url, headers=headers)

# 4. 查看响应的内容
print(response.content.decode())



'''
Cookies参数语法以及格式
cookies参数的格式:字典
cookies = {"Cookie的name": "Cookie的Value"}

该字典对应请求头中Cookie字符串,以分号、空格分割每一对字典键值对
等号左边的是一个cookie的name,对应cookies字典的key
等号右边对应cookies字典的value

cookies参数的使用方式:
response = requests.get(url,cookies={})
cookeie一般是有过期时间的,一旦过期需要重新获取
'''

'''
完整案例
登录传智健康,获取到登录之后的cookie字符串
将浏览器抓包获取到的cookie字符串,转换成字典,以便用于发送请求时传递给cookies参数
'''
import requests

# 1. 准备目标url地址
url = 'http://manager-health-java.itheima.net/pages/main.html'

# 2. 准备请求头信息,User-Agent,(从浏览器抓包复制)
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
}
# 准备cookies字典
cookie_dict = {
    'JSESSIONID': '14C7DFBF244EB81DC281FC1B96EF88D6'  #cookie是有过期时间的
}

# 3. 发送请求,获取响应数据
response = requests.get(url, headers=headers, cookies=cookie_dict)

# 4. 查看响应的内容
print(response.content.decode())

 

requests中cookiejar处理

'''
转换方式
# 将cookiejar转换成字典类型
cookies_dict = requests.utils.dict_from_cookiejar(response.cookies)
# 将字典类型转换成cookiejar类型
cookies_jar = requests.utils.cookiejar_from_dict(cookies_dict)

其中response.cookies返回的就是cookieJar类型的对象
requests.utils.dict_from_cookiejar函数返回cookies字典
'''

示例代码:
import requests

url = 'https://www.baidu.com'

response = requests.get(url)


print(f'获取到的cookiejar对象为:{response.cookies}')

cookie_dict = requests.utils.dict_from_cookiejar(response.cookies)
print(f'将cookiejar转换为字典:{cookie_dict}')


cookie_jar = requests.utils.cookiejar_from_dict(cookie_dict)
print(f'将cookie_dict转换成cookiejar:{cookie_jar}')

 

案例:百度贴吧爬虫


import  time
import requests

#url地址的模板
base_url = 'https://tieba.baidu.com/f?kw={}&pn={}'


#获取要抓取的贴吧的名字
tb_name = input('请输入要抓取贴吧的名字:')

#获取要抓取的页数
page_num = int(input("请输入要抓取的页数:"))


#构造url地址
url_list = [base_url.format(tb_name, i * 50) for i in range(page_num)]



#准备headers中的User-Agent
headers = {

  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
               "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36",
  'Cookie': 'BIDUPSID=FFC2CDB80F7944FEFB261E1424C119EB;'
}


# 遍历每一页的url地址,发送请求,获取响应
for i ,url in enumerate(url_list):  #enumerate获取元素索引位置,元素
    response = requests.get(url,headers=headers)
    #将获取的到得响应内容,保存到文件中
    # 构造文件名
    file_name = tb_name + "第{}页.html".format(i + 1)
    # 打开文件,将数据保存到文件中
    with open(file_name, 'w', encoding='utf-8') as f:
        f.write(response.content.decode())

    print(file_name, '保存成功')

    # 设置time.sleep() 防止访问速度过快
    time.sleep(2)

 

案例:黑马论坛爬虫

"""
需求: 
1. 给定一个贴吧名字,给定要抓取的页数
2. 将贴吧的每一页数据保存到 html 中

分析: 
1. 让用户输入贴吧名称和要抓取的页数
2. 构造出要抓取贴吧页面地址
3. 遍历向每个地址发送请求,并将响应的内容保存成 html 页面
    3.1 准备请求头
    3.2 循环遍历地址列表
    3.3 发送请求获取响应
    3.4 保存成html文件
    3.5 设置休眠,防止频率太快被阻止请求
"""
import time
import random
import requests


"""1. 让用户输入贴吧名称和要抓取的页数"""
name = input('请输入论坛名称')
page = int(input('请输入页数'))
print(name, page)



"""2. 构造出要抓取贴吧页面地址"""
base_url = 'http://bbs.itheima.com/thread-{}-{}-1.html'
url_list = [base_url.format(name, i + 1) for i in range(page)]
print(url_list)





"""3. 遍历向每个地址发送请求,并将响应的内容保存成 html 页面"""
# 3.1 准备请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'
}

# 3.2 循环遍历地址列表
for i, url in enumerate(url_list):

    # 3.3 发送请求获取响应
    response = requests.get(url, headers=headers)

    # 3.4 保存成html文件
    filename = name + "第{}页.html".format(i + 1)
    with open(filename, 'w', encoding='utf8') as file:
        file.write(response.text)

    # 3.5 设置休眠,防止频率太快被阻止请求
    # random.randint(1, 3) # 生成随机范围的整数
    # random.uniform(1, 3)  # 生成随机范围的小数
    time_str = random.uniform(1, 3)
    time.sleep(time_str)
    print(time_str)

 

 

案例:豆瓣top250

import requests
import re


#需要爬取的页数
page = int(input('请输入你要爬取的页数:'))


#构造url地址

base_url= 'https://movie.douban.com/top250?start={}'


url_list= [base_url.format(i * 25) for i in range(page)]



#准备请求头
headers = {
    'User-Agent':

	'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0'
}


#循环遍历地址列表
for i ,url in enumerate(url_list):
    response = requests.get(url, headers=headers)
    page_content = response.text
    obj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)</span>', re.S)
    result = obj.findall(page_content)
    for i in result:
        with open('豆瓣top250.txt', 'a', encoding='utf8') as file:
            file.write(i)
            file.write("\n")

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在使用 Pythonrequests 库发起 HTTP 请求时,可以通过调用响应对象的 text 属性来获取响应的文本内容。例如: ```python import requests response = requests.get('https://www.example.com') print(response.text) ``` 上述代码会向 https://www.example.com 发起一个 GET 请求,并将响应的文本内容打印输出。需要注意的是,响应的文本内容可能会根据响应头中的 Content-Type 属性而有所不同,如 HTML 页面、JSON 数据等。在解析响应内容时,我们需要对响应类型进行判断,以便正确地处理响应内容。 ### 回答2: Python爬虫库中的requests库是一个非常常用的库,它提供了简洁而丰富的接口,用于发送HTTP请求和处理响应。其中,requests库中的text属性是用来获取响应的内容的。 在使用requests库发送请求后,可以通过response对象的text属性来获取服务器返回的响应内容。text属性返回的是Unicode型的内容,也就是网页的HTML源代码或者是接口的返回数据。 使用text属性可以很方便地获取网页的内容,然后进行解析和提取所需的数据。可以将获取到的内容保存到本地文件中,或者使用正则表达式或解析库(如BeautifulSoup)进行进一步的处理。 需要注意的是,text属性获取的内容可能会出现乱码或编码问题。对于出现乱码的情况,可以通过设置response对象的encoding属性来进行解决。另外,如果响应的内容不是文本类型(如图片、音频、视频等),那么使用text属性获取的结果可能是乱码或者不正确的,此时可以使用content属性获取二进制数据。 总之,requests库中的text属性是获取请求响应内容的一个重要属性,它为我们进行网页爬取和数据提取提供了便利。 ### 回答3: Python 爬虫使用 requests 库的 text 属性是用来获取请求返回的内容。具体而言,文档中 text 属性返回的是以 Unicode 编码的文本内容,通常是 HTML 页面的内容。在使用 requests 库发送请求后,可以通过调用 text 属性来获取正文内容。 使用 text 属性的方法如下: 1. 导入 requests 模块使用 `import requests`。 2. 发送请求并获取响应,例如使用 `response = requests.get(url)` 方法。 3. 调用获取的响应对象的 text 属性,例如使用 `response.text`。 这样就可以获取到请求返回的内容。可以通过打印 text 的结果来查看爬取到的网页内容。需要注意的是,text 属性返回的是以 Unicode 编码的文本内容,如果要保存到文件或进行其他操作,可能需要进行一些编码或解码的处理。 总之,Python 爬虫中的 requests 库的 text 属性是用来获取请求返回的内容。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值