- 基于如下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/

- 代码展示

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

  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)

请求载体身份标示的伪装:

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": "",
  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':'',
  20. 'interval_id':'100:90',
  21. 'action':'',
  22. 'start':'',
  23. 'limit':''
  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': '',
  23. 'pageSize': ''
  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': '',
    16. 'productName':'',
    17. 'conditionType': '',
    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. 孤荷凌寒自学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模块(1)

    一.引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃 ...

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

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

  6. Python爬虫(requests模块)

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

  7. python爬虫之requests模块介绍

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

  8. 【python爬虫】requests模块

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

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

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

随机推荐

  1. 关于JavaScript的一些笔试题

    1.原题: function Foo() { getName = function () { alert (); }; return this; } Foo.getName = function () ...

  2. 洛谷 1017 进制转换 (NOIp2000提高组T1)

    [题解] 纯模拟题. 我们都知道十进制数化成m进制数可以用短除法,即除m取余.逆序排列.而m进制数化为十进制数,按权展开求和即可. 但在本题中进制的基数R可能为负数,我们知道a%R的符号与R一致,也就 ...

  3. LA 3029 Subsequence

    LA 3029 A sequence of N positive integers (10 < N < 100 000), each of them less than or equal ...

  4. BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=2806 (luogu) https://www.luogu.org/pro ...

  5. ansible roles例子

    #理解 changed_when failed_when become become_user ansible_become ansible_become_user static #检查group_v ...

  6. 文件处理: read、readline、 readlines()

    假设a.txt的内容如下所示: Hello Welcome What is the fuck.. 1. read([size])方法 read([size])方法:从文件当前位置起读取size个字节, ...

  7. jquery追加元素的几种方法(append()、prepend()、after()、before()、insertAfter()、insertBefore())

    最近项目不是很忙,抽空整理了下,js中常用追加元素的几种方法. <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  8. JSOI最大值 (线段树)

    change 单点修改 query 区间最值 Program XJOI2321; ; ..maxn*] of longint; i,m,n,ans,p,x:longint; ch:char; func ...

  9. leetcode算法学习----155. 最小栈(MinStack )

    下面题目是LeetCode算法155题: https://leetcode.com/problems/min-stack/ 题目1:最小函数min()栈 设计一个支持 push,pop,top 操作, ...

  10. codevs——1517 求一次函数解析式

    1517 求一次函数解析式  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解       题目描述 Description 相信大家都做过练习册上的这种 ...