requests的安装与简单运用
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">地 址:</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的安装与简单运用的更多相关文章
- (转)python requests的安装与简单运用
requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib ...
- python requests的安装与简单运用
requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib ...
- 转: python requests的安装与简单运用
requests是Python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢? 官方文档中是这样说明的: python的标准库urlli ...
- python requests的安装与简单运用(转)
http://www.cnblogs.com/fightformylife/p/4134986.html http://cn.python-requests.org/zh_CN/latest/ htt ...
- salt安装与简单使用---基于centos6.5
1.简介SaltStack 是一个服务器基础架构集中化管理平台,具备配置管理.远程执行.监控等功能,一般可以理解为简化版的puppet和加强版的func.SaltStack 基于Python语言实现, ...
- Linux 性能测试工具 sysbench 的安装与简单使用
文章目录 Linux 性能测试工具 sysbench 的安装与简单使用 一 背景 二 实验环境 2.1 操作系统 2.2 其他配 ...
- MongoDB在Windows下安装、Shell客户端的使用、Bson扩充的数据类型、MongoVUE可视化工具安装和简单使用、Robomongo可视化工具(2)
一.Windows 下载安装 1.去http://www.mongodb.org/downloads下载,mongodb默认安装在C:\Program Files\MongoDB目录下,到F:\Off ...
- memcache的windows下的安装和简单使用
原文:memcache的windows下的安装和简单使用 memcache是为了解决网站访问量大,数据库压力倍增的解决方案之一,由于其简单实用,很多站点现在都在使用memcache,但是memcach ...
- 【RabbitMQ】RabbitMQ在Windows的安装和简单的使用
版本说明 使用当前版本:3.5.4 安装与启动 在官网上下载其Server二进制安装包,在Windows上的安装时简单的,与一般软件没什么区别. 安装前会提示你,还需要安装Erlang,并打开下载页面 ...
随机推荐
- Java多线程实践
1.实现Runnable接口 import java.util.Random; public class PrintTask implements Runnable{ private final in ...
- 通过broadcastreceiver 监听短信问题
在mainfest中 订阅 短信到来的广播时候 发现找不到 <action android:name="android.provider.Telephony.SMS_RECEIV ...
- 区别 Jquery对象和Dom对象
在讨论之前,先约定好定义变量的风格. 如果获取的对象是jQuery对象,那么在变量前加上$,例如: var $variable = jQuery对象; 如果获取的是DOM对象,则定义如下: var v ...
- JZOJ 1312:关灯问题
传送门 少见的DP再DP题目.题面不短,但是可以看出来这是一道DP题.而且正解的算法复杂度应该是$O(N^3)$.而且给了部分$O(N^4)$的算法的分.可以看出来要AC是要在DP上加上优化的. 设$ ...
- python 培训之Django
1.Install sudo apt-get install python-pip sudo pip install django==1.8 2. Create Project django- ...
- JavaWeb---总结(十三)使用Session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
- 什么是xmlschema
XML Schema定义(XML Schema Definition,XSD)是一套W3C标准,用于基于XML的称为XML Schema的类型系统.用于定义的语言是一种称为XML模式定义语言(XML ...
- OC之NSString、NSMutableString学习笔记 常用方法
NSString篇: 1.字符串连接 NSString *beijing = @"北京"; NSString *welcome = [beijing stringByAppendi ...
- layer图层常见属性
把layer常见图层属性总结了一下^-^欢迎大家讨论~~~~来吧 ,代码属性 #import "CZViewController.h" @interface CZViewContr ...
- win7怎么显示隐藏文件夹
1. 点击“组织”,再选择“文件夹和搜索选项”命令. 2. 接下来在打开的“文件夹选项”对话框中,单击“查看”,切换到“查看”选项卡中. 3. 然后在下面的“高级设置”区域,取消“隐藏受保护的操作系统 ...