zoukankan      html  css  js  c++  java
  • (爬虫)requests库

    一、requests库简介

      urllib库和request库的作用一样,都是服务器发起请求数据,但是requests库比urllib库用起来更方便,它的接口更简单,选用哪种库看自己。

      如果没有安装过这个库,需要先 pip install requests 安装。

    二、requests库的基本用法

    1、发送GET请求

      通过get方法去请求百度页面:

     1 import requests
     2 
     3 resp = requests.get('http://www.baidu.com/')
     4 # text是requests库以自己猜测的解码方式去解码,所以可能会出现乱码的问题
     5 print(resp.text)
     6 # content返回的bytes的数据,所以可以根据自己指定的解码方式去解码就不会出现问题
     7 print(resp.content.decode('utf-8'))
     8 # url获取当前请求的url
     9 print(resp.url)
    10 # encoding获取当前页面的编码方式
    11 print(resp.encoding)
    12 # status_code获取当前的状态码
    13 print(resp.status_code)

      那么如何添加请求参数和headers请求头信息呢,requests库现在就比urllib库好用简单了,urllib库还需要手动对请求的参数进行编码才能去请求,而requests库则将这个步骤在底层进行封装了,只需要将参数传递进去即可,如下:

     1 import requests
     2 
     3 url = 'http://www.baidu.com/s'
     4 headers = {
     5         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
     6     }
     7 params = {
     8     'wd': '林俊杰'
     9 }
    10 resp = requests.get(url, params=params, headers=headers)
    11 print(resp.url)
    12 
    13 with open('baidu.html', 'w', encoding='utf-8') as f:
    14     f.write(resp.content.decode('utf-8'))

    2、发送POST请求

      我们以拉钩网为例,去爬取拉勾网的职位信息:

     1 import requests
     2 
     3 url = 'https://www.lagou.com/jobs/positionAjax.json?city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false'
     4 headers = {
     5     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',
     6     'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
     7     }
     8 data = {
     9     'first': 'true',
    10     'pn': 1,
    11     'kd': 'python'
    12 }
    13 
    14 resp = requests.post(url, data=data, headers=headers)
    15 print(resp.json())

    3、使用代理

      requests库使用代理就非常简单了,只需要在请求的方法(get、post)中添加proxies参数即可:

    1 import requests
    2 
    3 proxy = {
    4     'http': '115.218.216.251:9000'
    5 }
    6 
    7 resp = requests.get(url='http://www.httpbin.org/ip', proxies=proxy)
    8 print(resp.text)

    4、cookie模拟登陆

      我们可以通过cookie获取到cookie信息:

    1 import requests
    2 
    3 resp = requests.get('http://www.baidu.com/')
    4 # cookie 返回cookie对象
    5 print(resp.cookies)
    6 # get_dict 将cookie信息以字典的形式返回
    7 print(resp.cookies.get_dict())

      urllib库可以使用opener发送多个请求,并且多个请求之间是共享cookie的,requests库也要达到共享cookie的目的,我们可以使用requests库提供的session对象,这里的session不是web中的那个session,这里只是一个会话的对象而已,下面以登录人人网为例,来使用cookie来登录:

     1 import requests
     2 
     3 login_url = 'http://www.renren.com/PLogin.do'
     4 dapeng_url = 'http://www.renren.com/880151247/profile'
     5 headers = {
     6     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',
     7 }
     8 data = {
     9     'email': '17319045463',
    10     'password': 'xxxxx'
    11 }
    12 
    13 session = requests.Session()
    14 
    15 session.post(url=login_url, data=data, headers=headers)
    16 
    17 resp = session.get(url=dapeng_url, headers=headers)
    18 with open('renren.html', 'w', encoding='utf-8') as f:
    19     f.write(resp.content.decode('utf-8'))
  • 相关阅读:
    面向连接的网络应用程序--服务器端
    使用完整读写函数的网络应用程序
    套接字编程基础
    网络编程基础
    传输控制协议TCP
    UDP协议
    电子词典
    strtok()函数、fseek()函数、fwrite()函数、fread()函数的使用
    指针与数组
    软件推荐----RDO(Remote Desktop Organizer)
  • 原文地址:https://www.cnblogs.com/Sweltering/p/10077359.html
Copyright © 2011-2022 走看看