一.引入

Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。

警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。

1.概要

  • 基于requests的get请求
  • 基于requests模块的post请求
  • 基于requests模块ajax的get请求
  • 基于requests模块ajax的post请求
  • 综合项目练习:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据

2.回顾

  • 常见的请求头
  • 常见的相应头
  • https协议的加密方式

二.开始正题

1.基于如下5点展开requests模块的学习

  • 什么是requests模块

    • requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求。功能强大,用法简洁高效。在爬虫领域中占据着半壁江山的地位。
  • 为什么要使用requests模块
    • 因为在使用urllib模块的时候,会有诸多不便之处,总结如下:

      • 手动处理url编码
      • 手动处理post请求参数
      • 处理cookie和代理操作繁琐
      • ......
    • 使用requests模块:
      • 自动处理url编码
      • 自动处理post请求参数
      • 简化cookie和代理操作
      • ......
  • 如何使用requests模块
    • 安装:

      • pip install requests
    • 使用流程
      • 指定url
      • 基于requests模块发起请求
      • 获取响应对象中的数据值
      • 持久化存储
  • 通过5个基于requests模块的爬虫项目对该模块进行学习和巩固
    • 基于requests模块的get请求

      • 需求:爬取搜狗指定词条搜索后的页面数据
    • 基于requests模块的post请求
      • 需求:登录豆瓣电影,爬取登录成功后的页面数据
    • 基于requests模块ajax的get请求
    • 基于requests模块ajax的post请求
    • 综合练习
      • 需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据http://125.35.6.84:81/xk/

2.代码展示

需求:爬取搜狗指定词条搜索后的页面数据

  1. import requests
  2. import os
  3. #指定搜索关键字
  4. word = input('enter a word you want to search:')
  5. #自定义请求头信息
  6. headers={
  7. 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
  8. }
  9. #指定url
  10. url = 'https://www.sogou.com/web'
  11. #封装get请求参数
  12. prams = {
  13. 'query':word,
  14. 'ie':'utf-8'
  15. }
  16. #发起请求
  17. response = requests.get(url=url,params=param)
  18.  
  19. #获取响应数据
  20. page_text = response.text
  21.  
  22. with open('./sougou.html','w',encoding='utf-8') as fp:
  23. fp.write(page_text)

3.请求载体身份标识的伪装:

  • User-Agent:请求载体身份标识,通过浏览器发起的请求,请求载体为浏览器,则该请求的User-Agent为浏览器的身份标识,使用爬虫程序发起的请求,则该请求的载体为爬虫程序,则该请求的User-Agent为爬虫程序的身份标识。可以通过判断该值来获知该请求的载体究竟是基于哪款浏览器还是基于爬虫程序。
  • 反爬机制:某些门户网站会对访问该网站的请求中的User-Agent进行捕获和判断,如果该请求的UA为爬虫程序,则拒绝向该请求提供数据。
  • 反反爬策略:将爬虫程序的UA伪装成某一款浏览器的身份标识。

需求:登录豆瓣电影,爬取登录成功后的页面数据

  1. import requests
  2. import os
  3. url = 'https://accounts.douban.com/login'
  4. #封装请求参数
  5. data = {
  6. "source": "movie",
  7. "redir": "https://movie.douban.com/",
  8. "form_email": "15027900535",
  9. "form_password": "bobo@15027900535",
  10. "login": "登录",
  11. }
  12. #自定义请求头信息
  13. headers={
  14. 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
  15. }
  16. response = requests.post(url=url,data=data)
  17. page_text = response.text
  18.  
  19. with open('./douban111.html','w',encoding='utf-8') as fp:
  20. fp.write(page_text)

需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情数据

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3.  
  4. import requests
  5. import urllib.request
  6. if __name__ == "__main__":
  7.  
  8. #指定ajax-get请求的url(通过抓包进行获取)
  9. url = 'https://movie.douban.com/j/chart/top_list?'
  10.  
  11. #定制请求头信息,相关的头信息必须封装在字典结构中
  12. headers = {
  13. #定制请求头中的User-Agent参数,当然也可以定制请求头中其他的参数
  14. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
  15. }
  16.  
  17. #定制get请求携带的参数(从抓包工具中获取)
  18. param = {
  19. 'type':'5',
  20. 'interval_id':'100:90',
  21. 'action':'',
  22. 'start':'0',
  23. 'limit':'20'
  24. }
  25. #发起get请求,获取响应对象
  26. response = requests.get(url=url,headers=headers,params=param)
  27.  
  28. #获取响应内容:响应内容为json串
  29. print(response.text)

需求:爬取肯德基餐厅查询http://www.kfc.com.cn/kfccda/index.aspx中指定地点的餐厅数据

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3.  
  4. import requests
  5. import urllib.request
  6. if __name__ == "__main__":
  7.  
  8. #指定ajax-post请求的url(通过抓包进行获取)
  9. url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
  10.  
  11. #定制请求头信息,相关的头信息必须封装在字典结构中
  12. headers = {
  13. #定制请求头中的User-Agent参数,当然也可以定制请求头中其他的参数
  14. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
  15. }
  16.  
  17. #定制post请求携带的参数(从抓包工具中获取)
  18. data = {
  19. 'cname':'',
  20. 'pid':'',
  21. 'keyword':'北京',
  22. 'pageIndex': '1',
  23. 'pageSize': '10'
  24. }
  25. #发起post请求,获取响应对象
  26. response = requests.get(url=url,headers=headers,data=data)
  27.  
  28. #获取响应内容:响应内容为json串
  29. print(response.text)

需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据

  1. import requests
  2. from fake_useragent import UserAgent
  3.  
  4. ua = UserAgent(use_cache_server=False,verify_ssl=False).random
  5. headers = {
  6. 'User-Agent':ua
  7. }
  8.  
  9. url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
  10. pageNum = 3
  11. for page in range(3,5):
  12. data = {
  13. 'on': 'true',
  14. 'page': str(page),
  15. 'pageSize': '15',
  16. 'productName':'',
  17. 'conditionType': '1',
  18. 'applyname':'',
  19. 'applysn':''
  20. }
  21. json_text = requests.post(url=url,data=data,headers=headers).json()
  22. all_id_list = []
  23. for dict in json_text['list']:
  24. id = dict['ID']#用于二级页面数据获取
  25. #下列详情信息可以在二级页面中获取
  26. # name = dict['EPS_NAME']
  27. # product = dict['PRODUCT_SN']
  28. # man_name = dict['QF_MANAGER_NAME']
  29. # d1 = dict['XC_DATE']
  30. # d2 = dict['XK_DATE']
  31. all_id_list.append(id)
  32. #该url是一个ajax的post请求
  33. post_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
  34. for id in all_id_list:
  35. post_data = {
  36. 'id':id
  37. }
  38. response = requests.post(url=post_url,data=post_data,headers=headers)
  39. #该请求响应回来的数据有两个,一个是基于text,一个是基于json的,所以可以根据content-type,来获取指定的响应数据
  40. if response.headers['Content-Type'] == 'application/json;charset=UTF-8':
  41. #print(response.json())
  42. #进行json解析
  43. json_text = response.json()
  44. print(json_text['businessPerson'])

Python爬虫之requests模块(1)的更多相关文章

  1. 孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块

    孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块 (完整学习过程屏幕记录视频地址在文末) 从今天起开始正式学习Python的爬虫. 今天已经初步了解了两个主要的模块: ...

  2. Python爬虫练习(requests模块)

    Python爬虫练习(requests模块) 关注公众号"轻松学编程"了解更多. 一.使用正则表达式解析页面和提取数据 1.爬取动态数据(js格式) 爬取http://fund.e ...

  3. Python 爬虫二 requests模块

    requests模块 Requests模块 get方法请求 整体演示一下: import requests response = requests.get("https://www.baid ...

  4. Python爬虫之requests模块(2)

    一.今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 二.回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 三. ...

  5. python爬虫值requests模块

    - 基于如下5点展开requests模块的学习 什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在 ...

  6. Python爬虫(requests模块)

     Requests是唯一的一个非转基因的Python HTTP库,人类可以安全享用. Requests基础学习 使用方法: 1.导入Requests模块: import requests 2.尝试用g ...

  7. 【python爬虫】requests模块

    文档:从 pythoneer 到 pythonista 的100个模块 链接:http://note.youdao.com/noteshare?id=2b95bb3651c21af80ca1936f8 ...

  8. python爬虫之requests模块介绍

    介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网页内容下 ...

  9. python 爬虫 基于requests模块发起ajax的post请求

    基于requests模块发起ajax的post请求 需求:爬取肯德基餐厅查询http://www.kfc.com.cn/kfccda/index.aspx中指定某个城市地点的餐厅数据 点击肯德基餐厅查 ...

随机推荐

  1. P2053 [SCOI2007]修车 费用流

    $ \color{#0066ff}{ 题目描述 }$ 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M ...

  2. Array数组结构底层实现复习

    Array数组结构底层实现复习 内容待总结: size capacity length

  3. shell-002:统计IP访问量

    统计IP访问量 #!/bin/bash # 统计IP的访问量 # 第一步首先得获取到日志的IP # 第二步给IP排序,这样相同的的IP就会在一起 sort # 第三步则给重复的IP统计数量,去重 un ...

  4. flask 发送QQ邮箱

    from flask import Flask from flask_script import Manager, Shell from flask_mail import Mail, Message ...

  5. tornado 03 请求与响应

    tornado 03 请求与响应 一.请求与响应 浏览器与服务器之间沟通的到底是什么信息 #服务器在后台一直保持运行着 #浏览器通过URL(路由.地址)发送请求 #服务器接收请求了通过tornado处 ...

  6. paraview添加vector

    https://youtu.be/cygVdhn-kG0 (须自行FQ)

  7. C. Connect Three Round #528 (Div. 2)【曼哈顿距离】

    一.题面 题目链接 二.分析 这题的关键是要确定一个点是从三个点出发的交汇点,其他的只要结合曼哈顿距离的定义即可明白.因为是三个点,这个交汇点的坐标分别对应的就是x,y值的中值.然后一个小技巧就是曼哈 ...

  8. 1、在linux服务器centos虚拟机搭建nginx网站

    1.搭建linux虚拟机 具体参考 http://jingyan.baidu.com/article/86112f135e584a273697876b.html (如何在WIN7下进行LINUX虚拟机 ...

  9. C#串口编程 操作硬件

    -------通过USB将硬件连接PC, 更新USB驱动,使用下面方法可控制相关设备. //1声明一个串口对象 public static SerialPort MainModule_Port_ = ...

  10. ISO端form表单获取焦点时网页自动放大问题

    iOS端网页form表单输入信息时,网页自动放大,这是因为meta标签 刚开始的时候meta标签是 <meta name="viewport" content="w ...