一、request模块介绍

1. 什么是request模块

  1. - python中原生的基于网络请求的模块,模拟浏览器发起请求。

2. 为什么使用request模块

  1. - urllib需要手动处理url编码,quote()。
  2. - urllib需要手动处理post请求参数。
  3. - cookie的代理操作比较繁琐
  4. 1. cookie
  5. - 创建一个cookiejar对象
  6. - 创建一个handler对象
  7. - 创建一个openner
  8. 2. 代理
  9. - 创建handler对象,代理ip和端口分装到该对象
  10. - 创建openner对象

3. request如何被使用

  1. - 安装:pip install requests
  2. - 使用流程:
  3. 1. 指定URL
  4. 2. 使用request模块发起请求
  5. 3. 获取响应数据
  6. 4. 进行持久化储存

3.通过5个基于request模块的爬虫项目对该模块进行系统学习和巩固

  1. - get请求
  2. - post请求
  3. - 基于ajaxget请求
  4. - 基于ajaxpost请求
  5. - 综合项目

二、项目实战

3. 基于request模块发起一个get请求

需求:爬取搜狗首页的页面数据

  1. import requests
  2.  
  3. # 指定url
  4. url = 'https://www.sogou.com/'
  5.  
  6. # 发起get请求:get方法会返回请求成功的响应对象
  7. response = requests.get(url=url)
  8.  
  9. # 获取响应中的数据值:text可以获取响应对象中字符串形式的页面数据
  10. page_data = response.text
  11.  
  12. # 持久化操作
  13. with open('./sougou.html','w',encoding='utf-8') as fp:
  14. fp.write(page_data)

response对象中其他重要的属性

  1. import requests
  2.  
  3. # 指定url
  4. url = 'https://www.sogou.com/'
  5.  
  6. # 发起get请求:get方法会返回请求成功的响应对象
  7. response = requests.get(url=url)
  8.  
  9. # content获取的是response对象中二进制(byte)类型的页面数据
  10. # print(response.content)
  11.  
  12. # 返回一个响应状态码
  13. # print(response.status_code)
  14.  
  15. # 响应头信息
  16. # print(response.headers)
  17.  
  18. # 获取请求的url
  19. # print(response.url)

4. 携带参数的get请求方式1

  1. import requests
  2.  
  3. url = 'https://www.sogou.com/web?query=周杰伦&ie=utf-8'
  4.  
  5. response = requests.get(url=url)
  6.  
  7. page_text = response.text
  8.  
  9. with open('./zhou.html','w',encoding='utf-8') as fp:
  10. fp.write(page_text)

5. 携带参数的get请求方式2

  1. import requests
  2.  
  3. url = 'https://www.sogou.com/web'
  4.  
  5. # 将参数封装到字典中
  6. params = {
  7. 'query':'周杰伦',
  8. 'ie':'utf-8',
  9. }
  10.  
  11. requests.get(url=url,params=params)
  12.  
  13. print(response.text)

6. 自定义请求头信息

  1. import requests
  2.  
  3. url = 'https://www.sogou.com/web'
  4.  
  5. # 将参数封装到字典中
  6. params = {
  7. 'query':'周杰伦',
  8. 'ie':'utf-8',
  9. }
  10.  
  11. # 自定义请求头信息
  12. headers = {
  13. 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
  14. }
  15.  
  16. response = requests.get(url=url,params=params,headers=headers)
  17.  
  18. print(response.status_code)

7. 基于requests模块发起的post请求

需求:登陆豆瓣网,获取登陆成功后的页面数据

  1. import requests
  2.  
  3. # 1. 指定post请求的url
  4. url = 'https://accounts.douban.com/login'
  5.  
  6. # 封装post请求的参数
  7. data = {
  8. 'source':'movie',
  9. 'redir':'https://movie.douban.com/',
  10. 'form_email':'account',
  11. 'form_password':'password',
  12. 'login':'登陆',
  13. }
  14.  
  15. # 自定义请求头信息
  16. headers = {
  17. 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
  18. }
  19.  
  20. # 2. 发起post请求
  21. response = requests.post(url=url,data=data,headers=headers)
  22.  
  23. # 3. 获取响应对象中的页面数据
  24. page_text = response.text
  25.  
  26. # 4. 持久化操作
  27. with open('./douban.html','w',encoding='utf-8') as fp:
  28. fp.write(page_text)

8. 基于Ajax的get请求

需求:抓取豆瓣电影上电影详情的数据

  1. import requests
  2.  
  3. url = 'https://movie.douban.com/j/chart/top_list?'
  4.  
  5. # 封装ajax的get请求中携带的参数(系统自带的抓包工具下面的Query String)
  6. params = {
  7. 'type': '',
  8. 'interval_id': '100:90',
  9. 'action':'',
  10. 'start': '',
  11. 'limit': '',
  12. }
  13.  
  14. # 自定义请求头信息
  15. headers = {
  16. 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
  17. }
  18.  
  19. response = requests.get(url=url,params=params,headers=headers)
  20.  
  21. print(response.text)

9. 基于Ajax的post请求

需求:爬取肯德基城市餐厅位置数据

  1. import requests
  2.  
  3. # 1. 指定url
  4. post_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
  5.  
  6. # 处理post请求
  7. data = {
  8. 'cname': '',
  9. 'pid': '',
  10. 'keyword': '北京',
  11. 'pageIndex': '',
  12. 'pageSize': '',
  13. }
  14.  
  15. # 自定义请求头信息
  16. headers = {
  17. 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
  18. }
  19.  
  20. # 2. 发起基于ajax的post请求
  21. response = requests.post(url=post_url,headers=headers,data=data)
  22.  
  23. print(response.text)

总结:普通的get和post的请求一般从地址栏获取url。ajax是一个局部刷新的异步请求,我们不能从地址栏获取ajax的url,要借助抓包工具获取地址。

10. 综合项目实战

需求:爬取搜狗知乎某一个词条对应一定范围页码表示的页面

  1. import requests
  2. import os
  3.  
  4. # 创建一个文件夹
  5. if not os.path.exists('./pages'):
  6. os.mkdir('./pages')
  7.  
  8. word = input('enter a word:')
  9.  
  10. # 动态指定页码的范围
  11. start_page_number = int(input('enter a start page number'))
  12. end_page_number = int(input('enter a end page nunber'))
  13.  
  14. # 自定义请求头信息
  15. headers = {
  16. 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
  17. }
  18.  
  19. # 1. 指定url:设计成一个具有通用的url
  20. url = 'https://zhihu.sogou.com/zhihu'
  21. for page in range(start_page_number,end_page_number + 1):
  22. params = {
  23. 'query':word,
  24. 'page':page,
  25. 'ie':'utf-8',
  26. }
  27. response = requests.get(url=url,params=params,headers=headers)
  28.  
  29. # 获取响应中的页面数据(指定页码(page))
  30. page_text = response.text
  31.  
  32. # 持久化存储
  33. file_name = word + str(page) + '.html'
  34. file_path = 'pages/' + file_name
  35. with open(file_path,'w',encoding='utf-8') as fp:
  36. fp.write(page_text)
  37. print(f'第{page}页数据写入成功')

爬虫之requests模块基础的更多相关文章

  1. 03爬虫-requests模块基础(1)

    requests模块基础 什么是requests模块 requests模块是python中原生基于网络模拟浏览器发送请求模块.功能强大,用法简洁高效. 为什么要是用requests模块 用以前的url ...

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

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

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

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

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

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

  5. 网络爬虫之requests模块的使用+Github自动登入认证

    本篇博客将带领大家梳理爬虫中的requests模块,并结合Github的自动登入验证具体讲解requests模块的参数. 一.引入:   我们先来看如下的例子,初步体验下requests模块的使用: ...

  6. Python爬虫(requests模块)

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

  7. 爬虫之requests模块

    requests模块 什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在爬虫领域中占据着半壁江山的 ...

  8. 04.Python网络爬虫之requests模块(1)

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

  9. Python 爬虫二 requests模块

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

随机推荐

  1. 详解Struts1.x的运行机制及命名规则

    Struts1.x 调用一个action的大致流程: 1)首先前端发送 *.do的一个action请求(通过点击表单提交按钮,js 事件等): 2)web.xml 文件通过 *.do 找到 Actio ...

  2. 免费的SSL证书,你值得拥有!Let's Encrypt 试用体验记录

    早上收到 Let’s Encrypt 的邮件,说偶之前申请的已经通过了,于是马上开始试用.Let’s Encrypt 是一个新的数字证书认证机构,它通过自动化的过程消除创建和安装证书的复杂性,为网站提 ...

  3. 使用slmgr查看、删除windows 授权(key)

    查看 slmgr.vbs /dlv 删除授权 使用管理员权限进入cmd All program -> accessories -> Command Prompt (右键 已管理员方式运行) ...

  4. March 21 2017 Week 12 Tuesday

    Sometimes ever, sometimes never. 相聚有时,后会无期. Maybe love is something we can't touch but we can feel w ...

  5. Android(java)学习笔记27:TextView属性大全

    TextView属性大全: android:autoLink       设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/email/ph ...

  6. Type Syntax error, insert ")" to complete Expression

      今天倒持了 几个小时!    愣是 没有明确 ,为什么我的JSP的第一行没有代码?  还是报错!   错误是: Description Resource Path Location Type Sy ...

  7. print (re.findall("(?:abc)+","abcabcabc"))

    _*_ coding:utf-8 _*_ import re findall 有括号优先级,所以我们这里一直出现的都是 abc print (re.findall("(abc)+" ...

  8. java 线程状态图

  9. 调用URL 接口服务

    1.Net调用URL 接口服务 using System; using System.Collections; using System.Configuration; using System.Dat ...

  10. CSS3 小会

    -webkit-perspective:800px;   其子元素获得3D元素支持,这里是设置子元素距离试图的位置:若设为0 则不支持子元素获得3d效果,不支持透视. 常与transform:rota ...