Python爬虫基础之urllib与requests

Python爬虫-Urllib方式

- 前言

此次我将讲述Python爬虫urllib与requests访问方式的一些基础的操作和遇到的一些坑,因为Python版本有2.7和目前的3.x版本,爬虫会有稍许区别,我会介绍一些区别,爬虫方式有多种,没有最好的方式,随着数据的需求加大,爬虫工具也会越来越简洁方便。但是如果你能了解多种爬虫方法,你也能对网络爬虫有更清楚的认识,初学者我建议使用requests方式,它会让你学起来更容易上手,urllib出现的较早,用起来稍微复杂点,但是如果你希望读懂很多爬虫大神写的东西,甚至学习很多爬虫框架底层内容,可能还需要了解一下。

一、Python2.7版本:
在2.7版本下,Python urllib模块分为两部分,urllib和urllib2。
(1)urllib和urllib2区别:

1、urllib提供urlencode方法,将需要传输的字典格式数据转换成网络传输的str格式如百度链接:https://www.baidu.com/s?wd=python2.7%20&rsv_spt=1 ‘&’符号后面就是我们传输的数据
2 、urllib2可以接受一个Request类对象,这样就意味着urllib2可以更改你的请求头数据以及更换ip代理,而urllib只能接受URL,无法更换请求数据
3、urllib还有一些方法如urlretrieve下载图片和视频,quote转码特殊字符是urllib2所没有的,所以我们经常需要使用urllib和urllib2协同工作

(2)请求网页基本命令:

这里加入了请求头参数user_agent,如果不带请求头很容易被反爬屏蔽。

import urllib2
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  
headers = { 'User-Agent' : user_agent }  
req = urllib2.Request('http://www.baidu.com',headers = headers)
res = urllib2.urlopen(req)
print res.read()
(3)添加请求参数方式访问网页:

目前大多数网站都有使用post请求,post请求方式都需要自己提供请求参数,比如登录页面。get方式请求也有参数只是在url已经自己带上了参数如百度的搜索,所以并不需要额外的添加。

import urllib  
import urllib2  
url = 'http://www.server.com/login'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  
values = {'username' : 'cqc',  'password' : 'XXXX' }  
headers = { 'User-Agent' : user_agent }  
data = urllib.urlencode(values)  
request = urllib2.Request(url, data, headers)  
response = urllib2.urlopen(request)  
page = response.read() 
(4)添加代理访问网页:

添加代理是反反爬策略中最实用的方法,如果有大量代理会让你的爬虫更快速高效的获取大量数据。

    url=''
    headers['User-Agent']='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36'
    req=urllib2.Request(url,headers=headers)
    ip = '113.122.42.161:6675'
    proxy_handler = urllib2.ProxyHandler({'http':ip})
    opener = urllib2.build_opener(proxy_handler)
    urllib2.install_opener(opener)
    response = urllib2.urlopen(req)
    data=response.read().decode('utf-8')
(5)配置cookie

有的网站访问需要验证cookie信息,cookie也可以用来免登陆操作。

import urllib2
import cookielib   #python2.7 需要用这个
req = urllib2.request(url,headers=headers)
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
urllib2.install_opener(opener)
response = urllib2.urlopen(req)
二、Python 3.5版本:
(1)py2.7与py3.5版本urllib的区别:

Python3.5 版本下将python2.7版本的urllib和urllib2 合并在一起成一个新的urllib,方法并入error、parse、request、response下,连接请求基本在request中通过urllib.request调用,数据处理的一些方式放入parse中,如2.7版本的urlencode方法就放在parse下,通过urllib.parse.urlencode调用,所以区别不大,重点介绍几个需要注意的。

(2)请求方式:
 import  urllib
 headers = {}
 url=''
 ip = '113.122.42.161:6675'
 headers['User-Agent']='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36'
 #urllib2中的Request和urlopen都合并到urllib.request下
 req=urllib.request.Request(url,headers=headers)
 proxy_handler = urllib.request.ProxyHandler({'http': ip})
 opener = urllib.request.build_opener(proxy_handler)
 urllib.request.install_opener(opener) 
 #使用自己安装好的Opener 
 response=urllib.request.urlopen(req,timeout=10) #timeout 设置最长请求时间,如果超时,停止请求
(3)配置cookie:
import urllib
import http.cookiejar  #和2.7不同
req = urllib.request.Request(action_url,data=data,headers=header) #data是传送参数,post请求常用
cookie = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
urllib.request.install_opener(opener)
response = urllib.request.urlopen(req,timeout=60)

Python爬虫-Requests方式

  • 介绍
    Requests是Python中的HTTP客户端库,网络请求更加直观方便,它与Urllib最大的区别就是在爬取数据的时候连接方式的不同。urllb爬取完数据是直接断开连接的,而requests爬取数据之后可以继续复用socket,并没有断开连接。个人比较推荐使用requests方式,常见的组合是Requests+BeautifulSoup(解析网络文本的工具库),解析工具常见的还有正则,xpath,个人觉得xpath和BeautifulSoup标签类解析学一种就好了,正则都可以学,用的地方很多,这个看个人喜好。
(1)请求网页基本命令:
import requests
url = ''
headers = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' } 
response  = requests.get(url,headers = headers) 
print(response.text)
(2)Post方式请求(添加请求参数):
import requests
url = ''
headers = {}
data = {
'key':'value'
}
response = requests.post(url,data=data,headers=headers)
#get方式添加请求参数方法
#response = requests.get(url,params=data,headers=headers)
print(response.status_code)
print(response.text)

如果用post请求登录用session对象比较好,它会帮助你保存前次操作,比如做验证码的时候,网络请求一次后,你读到验证码并成功输入正确验证信息,但是再一次网络请求时,网页将刷新验证码,导致验证出错。

(3)使用session对象访问

Requests提供了session的概念,使我们不需要关心Cookie值,可连续访问网页,并且如果你不访问登录页面直接发送post请求登录,则会被认为非法登录。因为访问登录界面式会分配一个Cookie,需要将这个Cookie在发送Post请求时带上,这种使用Session函数处理Cookie的方式之后会很常用。

import requests
url = ''
headers = {}
data = {
'key':'value'
}
s= requests.Session()
response = s.post(url,data=data,headers=headers)
print(response.status_code)
print(response.text)
(4)添加代理请求
import requests
proxies={
"http":"http://....",
"https":"http://...."
}
response = resquests.get("",proxies=proxies)
(5)返回请求信息的有关命令
import requests
resoonse= requestss.get()
response.text   #网页内容
response.content   #图片 视频二进制内容
response.json    ##返回json格式网页内容
response.cookies  #返回cookies
response.status_code  #返回状态码
response.headers  #返回头信息
response.url   #返回请求的url
response,apparent_encoding    #返回网页编码格式
response.history       #返回历史记录

结语

综上讲了urllib和requests的基本操作,希望能给一些对爬虫感兴趣的童鞋一个具体的概念,方法只是一种工具,试着去爬一爬会更容易上手,网络也会有很多的坑,做爬虫更需要大量的经验来应付复杂的网络情况。如果发现文章有错误的地方,欢迎指出,一起探讨学习。后续,我会写一些具体的爬虫项目。

如果您喜欢我的文章,请关注或点击喜欢,您的支持是我最大的动力 ^ ^~!
转载请注明作者及其出处

黑羊的皇冠 简书主页

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容

  • Python爬虫入门(urllib+Beautifulsoup) 本文包括:1、爬虫简单介绍2、爬虫架构三大模块3...
    廖少少阅读 9,800评论 0 6
  • Python入门网络爬虫之精华版 网址: https://github.com/lining0806/Python...
    ZHANG_GO阅读 618评论 0 2
  • 转眼之间假期已经过去了将近一周。孩子们的假期作业做得怎么样呢?放假的第二天,我在我们班的语文微信群中说:“...
    从源王有鹏阅读 474评论 1 3
  • 驼铃悠扬,我的身体随着那温婉的骆驼左右摆动,眺目远望,映入眼帘的是一望无际的荒漠和掩藏在其中的点点绿洲。鸣...
    简深js阅读 141评论 2 1
  • 我喜欢有未来的男人和有过去的女人 ——王尔德 有人说 一见钟情是积蓄了很多因素的结果 是命中注定 是什么,让你在那...
    春花花花花阅读 149评论 3 2