美文网首页
02-发送请求-request基本使用

02-发送请求-request基本使用

作者: Vanna_bot | 来源:发表于2018-12-26 18:37 被阅读0次
requests作用

发送网络请求,返回响应数据
requests中文文档

发送get请求
发送带header的请求
发送带参数的请求

发送get请求

【demo01】获取百度首页信息
import requests
# 目标url
url = 'https://www.baidu.com'
# 向目标url发送get请求
response = requests.get(url)
# 打印响应内容
print(response.text)
response的常用属性:
  • response.text 响应体 str类型
  • respones.content 响应体 bytes类型
  • response.status_code 响应状态码
  • response.request.headers 响应对应的请求头
  • response.headers 响应头
  • response.request.cookies 响应对应请求的cookie
  • response.cookies 响应的cookie(经过了set-cookie动作)
获取网页源码的通用方式:
  • response.content.decode()
  • response.content.decode("GBK")
  • response.text
【demo02】保存网络图片
import requests
# 图片的url
url = 'https://www.baidu.com/img/bd_logo1.png'
# 响应本身就是一个图片,并且是二进制类型
response = requests.get(url)
# print(response.content)
# 以二进制+写入的方式打开文件
with open('baidu.png', 'wb') as f:
    # 写入response.content bytes二进制类型
    f.write(response.content)

发送带header的请求

带header的原因:

模仿浏览器,欺骗服务器,获取和浏览器一致的内容

header形式:

字典

用法:

requests.get(url, headers=headers)

【demo03】模拟浏览器获取百度首页
# 获取百度首页
import requests
url='https://www.baidu.com'
# 请求头中带上User-Agent
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36'}
response=requests.get(url,headers=headers)
# 打印请求头信息
print(response.request.headers)

发送带参数的请求

请求参数形式:

字典
kw = {'wd':'长城'}

用法:

requests.get(url,params=kw)

【demo04】发送带参数的请求
# 发送带参数的请求
import requests
headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36'}
url = 'https://www.baidu.com/s?'
kw = {'wd': 'python'}
# 带上参数发起请求
response = requests.get(url, headers=headers, params=kw)
print(response.content)
【作业】获取新浪首页,查看response.text 和response.content.decode()的区别
import requests
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36'}
url = 'https://www.sina.com.cn/'
response = requests.get(url, headers=headers)
print(response.text)
print(response.content.decode())

结果:
response.text返回乱码
response.content.decode()没有返回乱码
结论:
response.text是根据网页的响应来猜测编码,如果不指定的话,默认是Unicode型的数据(ISO-8859-1)

【作业】实现任意贴吧的爬虫,保存网页到本地
import requests
import sys

class Tieba(object):

    def __init__(self, name, pn):
        self.name = name
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36'
        }
        self.url = 'http://tieba.baidu.com/f?kw={}&pn='.format(self.name)
        self.url_list = [self.url + str(i * 50) for i in range(pn)]

    def get_data(self, url):
        response = requests.get(url, headers=self.headers)
        return response.content

    def save_data(self, data, index):
        filename = self.name + "_{}.html".format(index)
        with open(filename, 'wb')as f:
            f.write(data)

    def run(self):
        # 遍历url列表
        for url in self.url_list:
            index = self.url_list.index(url)
            # 发送请求
            data = self.get_data(url)
            # 保存
            self.save_data(data, index)

if __name__ == '__main__':
    name = input("输入贴吧名:")
    pn = input("输入页数:")
    tieba = Tieba(name, int(pn))
    tieba.run()

相关文章

网友评论

      本文标题:02-发送请求-request基本使用

      本文链接:https://www.haomeiwen.com/subject/yrlklqtx.html