requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的:

python的标准库urllib2提供了大部分需要的HTTP功能,但是API太逆天了,一个简单的功能就需要一大堆代码。

我也看了下requests的文档,确实很简单,适合我这种懒人。下面直接看文档。

http://cn.python-requests.org/zh_CN/latest/user/quickstart.html

看下他的强大之处:

1、原始爬虫

最原始的爬虫爬虫可以只是发送一个HTTP请求,并获取返回的响应数据,使用Requests三行就可以写出一个简单的爬虫,代码如下:

import requests
r = requests.get('http://www.zhidaow.com')
print r.content

2、高级爬虫

给原始爬虫升级几个技能就可以投入使用了,我经常升级以下几个功能。

2.1 获取特定字段: BeautifulSoup+Requests

BeautifulSoup可以将HTML解析为DOM树,然后获取特定字段。关于BeautifulSoup的详细内容可以看这篇文章,这里只举一个简单的例子。

以下是途牛某游玩页面的部分代码

<div class="des">
<h1 class="mb_10">玉渊潭樱花节</h1>
<p class="address mb_5"><em class="c_999">地&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 址:</em></p>
<p class="othmes">
<span class="t1"><em class="c_999">游玩时间:</em>预计<b class="c_f80">4小时</b></span>
</p>
</div>

可以通过<b class="c_f80">..</b>这个特征来获取4小时这个字段:

import requests
from bs4 import BeautifulSoup as bs url = 'http://www.tuniu.com/play/9232/'
r = requests.get(url) soup = bs(r.content)
print soup.find('b', class_='c_f80').string
#输出字段有空格,可以通过strip()函数来过滤多余的空格和换行

注:也可以用requests和lxml的方式抓取。

2.2 使用代理

为避免屏蔽,抓取时通常需要代理,使用Requests的proxies参数可以实现这个效果。接上面代码:

proxies = {
"http": "http://10.10.1.10:3128",
"https": "http://10.10.1.10:1080",
}
r = requests.get(url, proxies=proxies)

如果代理需要账户和密码,则需这样:

proxies = {
"http": "http://user:pass@10.10.1.10:3128/",
}

2.3 模拟百度蜘蛛

抓取时模拟搜索引擎蜘蛛是个好主意,这里就以User-Agent试图模仿百度蜘蛛去抓取:

headers = {
'User-Agent': 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)',
}
r = requests.get(url, headers=headers)

3.4 多线程抓取

为了提高抓取速度,一般都会采用多线程的方式去抓取,可采用了第三方库threadpool的形式实现了多线程。在这里我采用另外一种形式,用标准库multiprocessing来实现:

import requests
from bs4 import BeautifulSoup as bs
from multiprocessing.dummy import Pool as ThreadPool #URL列表
urls = [
'http://www.tuniu.com/play/9232/',
'http://www.tuniu.com/play/9231/',
'http://www.tuniu.com/play/9237/',
'http://www.tuniu.com/play/9234/',
# etc..
] #提取字段函数
def get_play_time(url):
r = requests.get(url)
soup = bs(r.content)
print soup.find('b', class_='c_f80').string.strip() #设置线程数
pool = ThreadPool(4) #开启多线程
results = pool.map(get_play_time, urls) #关闭线程并等待结束
pool.close()
pool.join()

注:这个多线程的实现主要参考了这篇文章

2.5 requests+正则

有时候如果所需字段出现在JS等DOM树之外,可以直接使用正则的方式获取,有时候速度反而会更快一点。

2.6 抓取网页JS内容

很多网站会将重点内容放在JS中,增加了抓取的难度。这种可以通过Selenium+PhantomJS+Xpath的方式抓取。有点跑题了……哈哈

requests的安装与简单运用的更多相关文章

  1. (转)python requests的安装与简单运用

    requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib ...

  2. python requests的安装与简单运用

    requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib ...

  3. 转: python requests的安装与简单运用

    requests是Python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢? 官方文档中是这样说明的: python的标准库urlli ...

  4. python requests的安装与简单运用(转)

    http://www.cnblogs.com/fightformylife/p/4134986.html http://cn.python-requests.org/zh_CN/latest/ htt ...

  5. salt安装与简单使用---基于centos6.5

    1.简介SaltStack 是一个服务器基础架构集中化管理平台,具备配置管理.远程执行.监控等功能,一般可以理解为简化版的puppet和加强版的func.SaltStack 基于Python语言实现, ...

  6. Linux 性能测试工具 sysbench 的安装与简单使用

    文章目录 Linux 性能测试工具 sysbench 的安装与简单使用        一 背景        二 实验环境            2.1 操作系统            2.2 其他配 ...

  7. MongoDB在Windows下安装、Shell客户端的使用、Bson扩充的数据类型、MongoVUE可视化工具安装和简单使用、Robomongo可视化工具(2)

    一.Windows 下载安装 1.去http://www.mongodb.org/downloads下载,mongodb默认安装在C:\Program Files\MongoDB目录下,到F:\Off ...

  8. memcache的windows下的安装和简单使用

    原文:memcache的windows下的安装和简单使用 memcache是为了解决网站访问量大,数据库压力倍增的解决方案之一,由于其简单实用,很多站点现在都在使用memcache,但是memcach ...

  9. 【RabbitMQ】RabbitMQ在Windows的安装和简单的使用

    版本说明 使用当前版本:3.5.4 安装与启动 在官网上下载其Server二进制安装包,在Windows上的安装时简单的,与一般软件没什么区别. 安装前会提示你,还需要安装Erlang,并打开下载页面 ...

随机推荐

  1. Discuz! x3.1 /utility/convert/index.php Code Execution Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Discuz! x3.1的插件/utility/convert/inde ...

  2. Java JVM、JNI、Native Function Interface、Create New Process Native Function API Analysis

    目录 . JAVA JVM . Java JNI: Java Native Interface . Java Create New Process Native Function API Analys ...

  3. CSS 命名管理 之 BEM

    好吧,将 BEM 简单的解释为 “Block-Element-Modifier“, 其实是个不负责任的做法.鬼知道 Block 是什么啊?所以,看了一些似懂非懂的中文解释之后,自己还是得去找些英文来读 ...

  4. 数据结构算法C语言实现(十)--- 3.3栈与递归的实现

    一.简介 汉诺塔问题是递归的一个典型例子,而且书上的讲解很详细,对理解C语言函数及函数传参的工作机制很有帮助,值得一看.而且,递归在我看来和分治.DP.贪心等一样是十分优美的思想,值得学习!!! 二. ...

  5. js实现A*寻路算法

    这两天在做百度前端技术学院的题目,其中有涉及到寻路相关的,于是就找来相关博客进行阅读. 看了Create Chen写的理解A*寻路算法具体过程之后,我很快就理解A*算法的原理.不得不说作者写的很好,通 ...

  6. Mac配置一些开发环境(随时补充)

    Mac安装mysql并启动 brew install mysql mysql.server start /usr/local/Cellar/mysql/5.6.10/support-files/mys ...

  7. Linux系统被入侵后处理经历

    服务器托管在外地机房. 突然,频繁收到一组服务器ping监控不可达邮件,赶紧登陆zabbix监控系统查看流量状况. 可见流量已经达到了800M左右,肯定不正常,马上尝试SSH登陆系统,不幸的事,这种情 ...

  8. Mysql配置项的简单优化

    preface 众所周知,Mysql已经成为广泛使用的开源数据库了,so 公司阿里云的数据库为Mysql,在最开始的时候是直接yum安装,配置项都是默认的,没有任何调整,这次有时间就参考各路大神的资料 ...

  9. Excel_replace

    有时候我们需要对单元格中的数据需要一些精确的处理,比如将部分以70开的工号升为706,这时简单的查找替换就不能满足我的需求,因为这样会替换掉工号中末尾或者中间位的70,造成工号的错误. 如何实现这种精 ...

  10. POI导出Excel的空值问题

    情景: 页面上的表格导出Excel,表格没数据导出的空格也要参与运算,结果在Excel上出错了 看图, 行-A.A12是没有数据的,后台代码cell.setCellValue("" ...