看了下网上的概念,比较模糊不知道作用。利用例子总结了一下。

1.爬虫

网站有各种数据,获得自己感兴趣的数据并保存的一种脚本。

2.通信基础

1.post和get:(1)get是从服务器上获取数据,post是向服务器传送数据。
(2) 在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据包装后提交。
(3) GET方式提交的数据最多只能有1024字节,而POST则没有此限制。(对于具体大小各种说法,普遍认为)
(4)get数据会显示在地址栏,密码一类敏感数据应该post方式
一个大神的总结:http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html
2.request 和response:
(1)response的对象封装了服务器向客户端响应的数据和告诉客户端应该进行什么样的操作
(2)request包含了客户端向服务器端的请求,例如账号密码。

3.利用urllib2

参考:https://www.zhihu.com/question/20899988/answer/97620435
1.获得百度贴吧图片:

#coding=utf-8
图片网址:http://tieba.baidu.com/p/2460150866
浏览器定位到图片相应位置
<img pic_type="0" class="BDE_Image" src="https://imgsa.baidu.com/forum/w%3D580/sign=294db374d462853592e0d229a0ee76f2/e732c895d143ad4b630e8f4683025aafa40f0611.jpg" pic_ext="bmp" height="328" width="560">
我们想要获得这个图片的url,书写正则表达式匹配。r'src="(.+?\.jpg)" pic_ext' 括号里面的group1是想要的内容
import urllib2
import urllib
import redef getHtml(url):#1.# request=urllib2.Request(url) 构造了一个request# responseurllib2.urlopen(request)     使用request向服务器发送请求并获得了response#2.page = urllib2.urlopen(url)#直接打来url,和上面一样response = page.read()return responsedef saveImg(imageUrl,filename):#保存操作u=urllib.urlopen(imageUrl)data=u.read()f=open(filename,'wb')f.write(data)f.close()def getImg(html):reg = r'src="(.+?\.jpg)" pic_ext'#正则表达式imgre = re.compile(reg) #patternimglist = re.findall(imgre,html)#匹配x = 0for imgurl in imglist:saveImg(imgurl,str(x)+".jpg")x+=1html = getHtml("http://tieba.baidu.com/p/2460150866")
getImg(html)

2.访问空间:cookie的保存以及使用

#coding=utf-8
import urllib2
import  urllib
import cookielib
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }#识别客户端filename='cookie.txt'
#创一个cookie实例,保存
cookie=cookielib.MozillaCookieJar(filename)
#创建cookie处理器并建opener,urlopen其实就是个默认的opener,我们以后就用opener代替了urlopen
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))postdata=urllib.urlencode({'uinArea':'1184996095','pwdArea':'18221056092',})loginUrl='https://i.qq.com/?rd=1'
#创建request
request=urllib2.Request(loginUrl,postdata,headers)
try:result=opener.open(request)
except urllib2.HTTPError, e:print e.codeprint e.reason
#保存cookie,即使被丢弃和已经存在也保存
cookie.save(ignore_discard=True,ignore_expires=True)
anotherUrl='https://user.qzone.qq.com/916169754?ptlang=2052&source=friendlist'
#从文件里获得cookie = cookielib.MozillaCookieJar(filename)
#opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
while(True):result=opener.open(anotherUrl)#获得的response

3.几个小操作(以后直接用了):

# def saveImg(self,imageUrl,filename):
#     u=urllib.urlopen(imageUrl)
#     data=u.read()
#     f=open(filename,'wb')
#     f.write(data)
#     f.close()
#
# def saveBrief(self,content,name):
#     filename=name+'/'+name+".txt"
#     f=open(filename,'w+')
#     f.write(content.encode('utf-8'))
# import os
# def makedir(self,path):
#     path=path.strip()
#     isExists=os.path.exists(path)
#     if not isExists:
#         os.makedirs(path)
#         return True
#     else:
#         return False

4.贴吧的评论,页数内容

#根据静谧的博客修改
#coding=utf-8
import urllib
import urllib2
import re
class BDTB:def __init__(self,baseUrl,seeLZ):self.baseUrl=baseUrlself.seeLZ="?see_lz="+str(seeLZ)self.tool=Tool()def getpage(self,pagenum):try:url=self.baseUrl+self.seeLZ+"&pn="+str(pagenum)request=urllib2.Request(url)response=urllib2.urlopen(request)sPage = response.read()return sPage.decode('utf-8')except urllib2.URLError,e:print 'dsa'return  Nonedef getTitle(self):page = self.getpage(1)pattern = re.compile('<h3 class="core_title_txt.*?>(.*?)</h3>', re.S)result = re.search(pattern, page)if result:# print result.group(1)return result.group(1).strip()else:return Nonedef getPageNumber(self):page = self.getpage(1)#<li class="l_reply_num" style="margin-left:8px"><span class="red" style="margin-right:3px">141</span>回复贴,共<span class="red">5</span>页</li>pattern = re.compile('<li class="l_reply_num.*?</span>.*?<span.*?>(.*?)</span>',re.S)result = re.search(pattern, page)if result:# print result.group(1)return result.group(1).strip()else:return Nonedef getContent(self):#<div id="post_content_53018668923" class="d_post_content j_d_post_content ">            很多媒体都在每赛季之前给球员排个名,我也有这个癖好…………,我会尽量理性的分析球队地位,个人能力等因素,评出我心目中的下赛季50大现役球员,这个50大是指预估他本赛季在篮球场上对球队的影响力……不是过去的荣誉什么的,所以难免有一定的主观性……如果把你喜欢的球星排低了,欢迎理性讨论!<img class="BDE_Image" src="https://imgsa.baidu.com/forum/w%3D580/sign=557ae4d4fadcd100cd9cf829428947be/a9d6277f9e2f0708468564d9eb24b899a801f263.jpg" pic_ext="jpeg" pic_type="0" width="339" height="510"><br><br><br><br>状元维金斯镇楼<br>P.S 1 我每天都至少更新一个,不TJ。<br>      2 今年的新秀我就不考虑了,没上赛季参照</div>page = self.getpage(1)pattern=re.compile('<div id="post_content_.*?>(.*?)</div>',re.S)#本来我是直接通过正则表达式直接获得内容,但是写起来太麻烦了。看到博主的是面向对象处理,方便的多以后也能用。result = re.findall(pattern, page)#直接print result是一堆地址result = self.tool.replace(bdtb.getContent())for item in result:print item# 处理页面标签类
class Tool:# 去除img标签,7位长空格removeImg = re.compile('<img.*?>| {7}|')# 删除超链接标签removeAddr = re.compile('<a.*?>|</a>')# 把换行的标签换为\nreplaceLine = re.compile('<tr>|<div>|</div>|</p>')# 将表格制表<td>替换为\treplaceTD = re.compile('<td>')# 把段落开头换为\n加空两格replacePara = re.compile('<p.*?>')# 将换行符或双换行符替换为\nreplaceBR = re.compile('<br><br>|<br>')# 将其余标签剔除removeExtraTag = re.compile('<.*?>')def replace(self, x):x = re.sub(self.removeImg, "", x)x = re.sub(self.removeAddr, "", x)x = re.sub(self.replaceLine, "\n", x)x = re.sub(self.replaceTD, "\t", x)x = re.sub(self.replacePara, "\n    ", x)x = re.sub(self.replaceBR, "\n", x)x = re.sub(self.removeExtraTag, "", x)# strip()将前后多余内容删除return x.strip()baseURL='http://tieba.baidu.com/p/3138733512'
bdtb=BDTB(baseURL,1)
bdtb.getContent()

5.个人总结:

emmmm..大概流程就是请求获得目标网址所有内容,写正则,匹配获得所需,处理….保存。
cookie的获得和保存。先创建cookie,再创opener,用来获取url,各种操作获得数据保存。

爬虫入门二(urllib,urllib2)相关推荐

  1. 爬虫入门之urllib库详解(二)

    爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...

  2. 转 Python爬虫入门二之爬虫基础了解

    静觅 » Python爬虫入门二之爬虫基础了解 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以 ...

  3. Python爬虫入门系列——Urllib详解

    Python爬虫入门系列--Urllib详解 1.背景 1.1 初识爬虫 1.2 合法性 1.3 robots协议 2.要求 2.1 当前开发环境 2.2 编程基础 3.快速上手Urllib 3.1 ...

  4. Python爬虫入门之Urllib库的基本使用

    那么接下来,小伙伴们就一起和我真正迈向我们的爬虫之路吧. 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解 ...

  5. Python 爬虫入门(二)——爬取妹子图

    Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob ...

  6. python爬虫妹子图_Python 爬虫入门(二)——爬取妹子图

    Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. 公众号:[智能制造社区].欢迎关注,分享智能制造与编程那些事. 爬虫成果 当你运行代码后,文件夹就会 ...

  7. python3爬虫入门(urllib和requests简单使用)

    爬虫介绍 知道python有强大的的爬虫库,但是对于我们普通小白来说,写一个完整的爬虫需要知道什么甚至了解什么都是很重要的.掌握了这些基本点,才能够熟悉爬虫的构成和获取有用的信息. 编写一个小爬虫个人 ...

  8. Python爬虫入门四urllib库的高级用法

    1.设置headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些 Headers 的属性. 首先,打开我们的浏 ...

  9. Python爬虫入门三urllib库基本使用

    urllib是一个收集了多个涉及了URL的模块的包: URL获取网页 urllibtest.pyimport urllib2 response = urllib2.urlopen('http://ww ...

最新文章

  1. CCF-CSP 201612-2 工资计算(C++满分代码)
  2. 宿迁中学高考2021成绩查询,2020宿迁市地区高考成绩排名查询,宿迁市高考各高中成绩喜报榜单...
  3. 文件隐藏服务器版本信息,如何隐藏Apache版本号和其他敏感信息
  4. 问村民一个什么问题就能决定走哪条路?
  5. Leetcode每日一题:168.excel-sheet-column-title(Excel表名称)
  6. 直方图均衡化原理及c++代码
  7. Ubuntu恢复默认界面命令
  8. git如何选择性合并_看小姐姐用动图展示10大Git命令
  9. 又一篇好文:折磨人的商业计划书
  10. 什么是T1 mapping?
  11. Travis CI(持续集成)
  12. linux离线安装apr-util 报错,Linux 编译 apr-util 时报错
  13. 计算机网络---网络层
  14. MFC Rect 的详解
  15. 中国著名画家司志明画伟人获全国画界称赞,单幅被拍出65万
  16. Windows 8 平板(推荐)
  17. 常见的电脑运行卡顿原因及解决方法
  18. sql server 获取本机的ip地址
  19. 华为手机计算机的隐藏游戏,怎样把华为手机游戏隐藏起来 | 手游网游页游攻略大全...
  20. python股票分析-放量跌到底买入-涨了再卖

热门文章

  1. 文件夹错误 分配句柄_重启数据库遇到错误ORA27154,ORA27300,ORA27301,ORA27302
  2. 一维卷积神经网络、卷积神经网络的基础知识
  3. 深度残差收缩网络再次理解(论文地址+代码地址+代码理解)
  4. 01 | 从神经元说起:数学篇
  5. 时间戳timestamp
  6. Ubuntu下安装JDK1.8并配置开发环境
  7. [Unity] GameFramework 学习记录 1
  8. layui弹出层:皮肤扩展(文档解读)
  9. 派单o2o全开源版 v11.6.0 全新UI版 修复短信问题 小程序模块
  10. java爬虫代码示例_那些让你代码思维和能力有较大的提升Java源码