描述:requests是python的一个第三方HTTP(Hypertext Transfer Protocol,超文本传输协议)库,它比python自带的网络库urllib更加简单、方便和人性化;使用requests可以让python实现访问网页并获取源代码的功能;使用requests获取网页的源代码,最简单的情况下只需要两行代码

# 使用requests获取源代码
import requests
source = requests.get('https:www.baidu.com').content.decode()

1、安装requests库

sudo apt install requests
或者
sudo pip3 install requests -i https://mirrors.aliyun.com/pypi/simple

2、使用requests获取网页源代码

  2.1 GET方式

  对于使用get方式的网页,在python中可以使用requests的get()方法获取网页的源代码:

 import requests
html = requests.get('网址')
html_bytes = html.content
html_str = html_bytes.decode('utf-8')

  说明:(1)第1行导入requests库。

     (2)第2行使用get方法获取了网页,得到一个response对象。

     (3)第3行使用.content这个属性来显示bytes型网页的源代码,中文无法正常显示。

     (4)第4行将bytes型的网页源代码解析为字符串型的源代码。utf-8为编码格式

  代码合并

import requests
html_str = requests.get('网址').content.decode()

  2.2 POST方式

  对于使用post方式的网页,在python中可以使用requests的post()方法获取网页的源代码:

 import requests
date = {'key1':'value1',
'key2':'value2'}
html_formdata = requests.post('网址', data=data).content.decode()
# 利用formdata提交数据

  说明:(1)data这个字典视情况而定,构造这个字典是任务之一。

     (2)当一些网址提交的内容为json时,post()方法的参数会进行调整

        html_json = requests.post('网址',json=data).content.decoade() # 使用json提交数据

        requests可以自动将字典转换为JSON字符串

3、 结合requests与正表达式

  说明:通过requests获得了网页的源代码,就可以对源代码字符串使用正则表达式来提取文本信息。

4、多线程爬虫

  说明:(1)python这门语言有一个全局解释器锁(Global Interpreter Lock,GIL),导致python的多线程都是伪多线程,本质上是一个线程,不过线程间隔时间很短,宏观上是连续的。这种机制对I/O密集型的操作上影响不大,但是对于CPU计算密集型的操作上面,因为只能使用CPU的一个核,对性能产生很大的影响;涉及计算密集型的程序,需要使用多进程,python的多进程不受GIL的影响。

  4.1 多进程库(multiprocessing)

   说明:(1)multiprocessing本身是python的多进程库,用来处理与多进程相关的操作。但是由于进程与进程之间不能直接共享内存和堆栈资源,而且启动新的进程开销也比线程大得多,因此使用多线程来爬取比使用多进程有更多的优势。

      (2)multiprocessing下面有一个dummy模块,它可以让python的线程使用multiprocessing的各种方法。

      (2)dummy下面有一个Pool类,它用来实现线程池,这个线程池有一个map()方法,可以让线程池里面的所有线程都“同时”执行一个函数。

例子:

 from multiprocessing.dummy import Pool
def calc_num(num):
return num*num
pool = Pool(5)
origin_num = [x for x in range(10)]
result = pool.map(calc_num, origin_num)
print(result)

    说明:线程池的map()方法接收两个参数,第1个参数是函数名,第2个参数是一个列表。

    注意:第1个参数仅仅是函数的名字,不能带括号。第2个参数是一个可迭代的对象,这个可迭代对象里面的每一个元素都会被函数calc_num()接收作为参数。

       除了列表,元组、集合或则字典都可以作为map()的第2个参数。

  4.2 开发多线程爬虫

    说明:爬虫是I/O密集型的操作,特别是在请求网页源代码的时候,如果使用单线程来开发,会浪费大量的时间来等待网页返回,所以把多线程技术应用到爬虫中,可以大大提高爬虫的运行效率。

    例子:

 from multiprocessing.dummy import Pool
import requests def query(url):
requests.get(url)
url_list = []
for i in range(100):
url_list.append('https://baidu.com')
pool = Pool(5)
pool.map(query, url_list)

  4.3 爬虫的常见搜索算法

    (1)深度优先搜索

    (2)广度优先搜索

五、request模块的更多相关文章

  1. dojo/request模块整体架构解析

    总体说明 做前端当然少不了ajax的使用,使用dojo的童鞋都知道dojo是基于模块化管理的前端框架,其中对ajax的处理位于dojo/request模块.一般情况下我们使用ajax请求只需要引入do ...

  2. node.js的request模块

    request模块让http请求变的更加简单.最简单的一个示例: 1: var request = require('request'); 2:  3: request('http://www.goo ...

  3. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  4. python接口自动化测试(一)-request模块

    urllib.request模块是python3针对处理url的. 1. 首先导入: from urllib import request 2. 构造url,构造url的headers信息和传参[re ...

  5. request 模块详细介绍

    request 模块详细介绍 request Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装 ...

  6. 第5月第10天 node.js的request模块

    1.node.js的request模块 http://www.cnblogs.com/meteoric_cry/archive/2012/08/18/2645530.html

  7. 【nodejs】理想论坛帖子下载爬虫1.07 使用request模块后稳定多了

    在1.06版本时,访问网页采用的时http.request,但调用次数多以后就问题来了. 寻找别的方案时看到了https://cnodejs.org/topic/53142ef833dbcb076d0 ...

  8. python flask的request模块以及在flask编程中遇到的坑

    一.首先来讲讲遇到的坑: 1.linux下package的打包引用: """ 路径结构如下: ./project ./bin ./api ""&quo ...

  9. 爬虫之urllib包以及request模块和parse模块

    urllib简介 简介 Python3中将python2.7的urllib和urllib2两个包合并成了一个urllib库 Python3中,urllib库包含有四个模块: urllib.reques ...

  10. python3中urllib库的request模块详解

    刚刚接触爬虫,基础的东西得时时回顾才行,这么全面的帖子无论如何也得厚着脸皮转过来啊! 原帖地址:https://www.2cto.com/kf/201801/714859.html 什么是 Urlli ...

随机推荐

  1. (转)eclipse调试java程序的九个技巧

    转自:http://www.cnblogs.com/lingiu/p/3802391.html 九个技巧: 逻辑结构 条件debug 异常断点 单步过滤 跳到帧 Inspect expressions ...

  2. Request功能

    1.获取请求消息数据 获取请求行数据 获取请求头数据 获取请求体数据 请求空行没必要获取 1.获取请求行数据 GET /虚拟目录 /servlet路径  ?请求参数 HTTP/1.1 GET/day1 ...

  3. 第四十四篇 入门机器学习——matplotlib基础——实现数据可视化

    No.1. 绘制一条正弦曲线 No.2. 在一张图中绘制多条曲线 No.3. 可以为曲线指定颜色.线条样式 No.4. 可以指定横纵坐标轴的范围 也可以使用: No.6. 可以为每条曲线添加图示 No ...

  4. 2.2 logistic回归损失函数(非常重要,深入理解)

    上一节当中,为了能够训练logistic回归模型的参数w和b,需要定义一个成本函数 使用logistic回归训练的成本函数 为了让模型通过学习来调整参数,要给出一个含有m和训练样本的训练集 很自然的, ...

  5. LeetCode第144场周赛总结

    5117.IP地址无效化 首先计算出输入IP地址的长度,然后遍历每一个字符. 如果当前字符为'.',就在它的前后两侧分别加上'['和']'字符. 值得一提的是,C++的String类型提供了以上操作的 ...

  6. STA 开篇

    时序分析=动态时序分析+静态时序分析 动态时序分析简单讲就是gate-level simulation,仿真对象是netlist+sdf,通过SDF反标,得到gate跟net的delay,通过输入大量 ...

  7. linux 下查看Tomcat的状态,以及开启停止服务命令

    1.首先进入你的tomcat 的bin目录下 cd /你的安装目录/tomcat/bin 查看服务启动情况 ps -ef|grep java 此条命令具体含义 ps:将某个进程显示出来 -A 显示所有 ...

  8. codeforces 711 D.Directed Roads(tarjan 强连通分量 )

    题目链接:http://codeforces.com/contest/711/problem/D 题目大意:Udayland有一些小镇,小镇和小镇之间连接着路,在某些区域内,如果从小镇Ai开始,找到一 ...

  9. 线性筛-prime,强大O(n)

    和朴素的素数筛法一样,flag数组,记录x是否为素数 flag[x]=0,x为合数 falg[x]=1,x为素数 flag[1],无定义 其核心思想是,用x筛除与之差异最小的y,达到时间上O(n)的目 ...

  10. CDH安装错误集锦

      CDH安装过程中出现的错误 1.iptables: /sbin/iptables 不存在 我是因为误删将 /sbin/下的文件删除了. 解决方法: yum install iptables 2.c ...