100篇-Python爬虫专栏

【python】爬虫:Requests库、Cookies以及Se

2019-08-13  本文已影响26人  Alcazar
一张图解释:requests在python爬虫应用中的地位
Requests库概述

【介绍💬】:使用requests可以模拟浏览器的请求。(requests模块本质上是封装了的urllib3,所以比urllib更实用,所以关于urllib,大致了解就可以了,用来写爬虫,代码会很多...)

安装requests

 pip install requests
🐾Requests库的突出优势

【详解💬】:由于requests模块本质上是封装了的urllib3,所以我们不需要手动为 URL 添加查询字串,也不需要对 POST 数据进行表单编码。Keep-alive 和 HTTP 连接池的 功能是 100% 自动化的。

为什么使用Requests库
  • requests在python2 和python3中通用,方法完全一样;
  • 工作中爬虫基本都使用requests
  • requests能够自动帮助我们解压(gzip压缩的等)网页内容,简单易用 Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支 持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码;

模拟浏览器发送post请求用法

response = requests.post(url, data = data, headers=headers)
  • Requests库使用非常广泛,Twitter、Spotify、Microsoft、Amazon、以及若联邦政府机构都在内部使用。

🐾 Requests库的功能特性

cookie和session

本质上都是基于键值对的字符串。

Cookies

【简介💬】:Cookies 指某些网站为了辨别用户身份、 进行会话跟踪而存储在用户本地终端上的数据。
那么Cookies在哪儿呢?举个栗子:

cookies来源 Boss直聘
两者区别:
【优缺点💬】:
【使用建议💬】:

【小案例💬】:运行小程序,获取网页的cookie

# 获取cookie
def opt_cookie():
    browser = webdriver.Chrome()
    browser.get("https://www.baidu.com")
    # 获取所有cookie
    print(browser.get_cookies())
    # 添加cookie
    browser.add_cookie({"name":"username", "value":"Zurich"})
    print(browser.get_cookies())
    # 删除 cookie
    browser.delete_all_cookies()
    print(browser.get_cookies())
opt_cookie()

🐾爬虫的简单应用

【举个实例】:实现 “在线翻译”
【详解】:主要是借用了http://fy.iciba.com/
的在线翻译接口,然后使用较简洁的程序来实现“在线翻译”功能。

网站首页

【程序如下】:

class JinShan(object):
    def __init__(self,word):
        self.url = 'http://fy.iciba.com/ajax.php?a=fy'
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537. 36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
        }
        self.post_data = {"f": "auto", "t": "auto", "w": word}

    def request_post(self):
        response = requests.post(url=self.url, headers=self.headers,data=self.post_data)
        # print(response.content.decode())
        return response.content.decode()

    def translates(self,data):
        dict_data = json.loads(data)
        if dict_data['status'] == 1:
            print(dict_data['content']['out'])
        if dict_data['status'] == 0:
            print(dict_data['content']['word_mean'])

    def run(self):
        data = self.request_post()
        print('译文:')
        self.translates(data)

if __name__ == "__main__":
    print('输入您要翻译的内容:')
    word = input()
    jinshan = JinShan(word)
    jinshan.run()

运行结果:

输入您要翻译的内容:
使用requests可以模拟浏览器的请求。
译文:
Use requests to simulate browser requests.
输入您要翻译的内容:
Use requests to simulate browser requests.
译文:
使用请求模拟浏览器请求。

【🌰再举个实例🌰】:爬取百度贴吧

import requests
import sys

class BaiduTieBa:
    # 构建请求地址
    def __init__(self,name,pn):
        self.name = name
        self.url = "http://tieba.baidu.com/f?kw={}&ie=utf-8&tab=main".format(name)
        self.headers = {
            "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
        }

        self.url_list = [self.url + str(n*50) for n in range(pn)]
        print(self.url_list)

    def get_data(self,url):
        """
        请求数据
        :param url:
        :return:
        """
        r = requests.get(url, headers = self.headers)
        return r.content

    def save_data(self,data,num):
        # 保存数据
        file_name = self.name + "_" + str(num) + ".html"

        with open(file_name,'wb') as f:
            f.write(data)

    def run(self):
        for url in self.url_list:
            data = self.get_data(url)
            num = self.url_list.index(url)
            self.save_data(data,num)

if __name__ == "__main__":
    name = sys.argv[1]
    pn = int(sys.argv[2])
    baidu = BaiduTieBa(name,pn)
    baidu.run()

运行:

文件路径...>baidutieba>python baidu_tieba.py 清华大学 3

【程序解读】:关于请求头,来源于百度首页,见下图。

self.headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
}
User-Agent

【🐾运行结果】:

(已经被识别是爬虫🕸🕷,所以加载出来的图片都是一样的😂😂)
上一篇 下一篇

猜你喜欢

热点阅读