python爬虫第一天
太久没折腾爬虫 又要重头开始了....感谢虫师大牛的文章.
接下来的是我的随笔
0x01 获取整个页面
我要爬的是百度贴吧的图,当然也是跟着虫师大牛的思路.
代码如下:
#coding=utf-8 import urllib #urllib 模块读取web页面相当于接口 def gethtml(url): #定义一个gethtml函数得到页面 page = urllib.urlopen(url) html = page.read() return html html = gethtml("http://tieba.baidu.com/p/4674704187") print html
按照我的标注大概思路是这样,接着是虫师大牛的讲解:Urllib 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp上的数据。首先,我们定义了一个getHtml()函数:
urllib.urlopen()方法用于打开一个URL地址。
read()方法用于读取URL上的数据,向getHtml()函数传递一个网址,并把整个页面下载下来。执行程序就会把整个网页打印输出。
0x02 抓取数据
这里是我们想要的主题,代码如下:
#coding=utf-8 import urllib import re #urllib 模块读取web页面相当于接口,第二次正则表达试提图片 def gethtml(url): #定义一个gethtml函数得到页面 page = urllib.urlopen(url) html = page.read() return html #在原来的基础上修改添加正则表达式的语句 src="http://imgsrc.baidu.com/forum/w%3D580/sign=ab2da672e124b899de3c79305e061d59/82777fec54e736d1ac3b007a93504fc2d5626915.jpg" def getimg(html): reg = r'scr="(.+?\.jpg)"pic_ext' imgre = re.compile (reg) imglist = re.findall (imgre,html) #牵扯到异步知识但还不算是,这里按顺序取得图片,我的理解.233 return imglist html = gethtml("http://tieba.baidu.com/p/4674704187") print getimg(html)
我们又创建了getImg()函数,用于在获取的整个页面中筛选需要的图片连接。re模块主要包含了正则表达式:
re.compile() 可以把正则表达式编译成一个正则表达式对象.
re.findall() 方法读取html 中包含 imgre(正则表达式)的数据。
运行脚本将得到整个页面中包含图片的URL地址。
0x03 通过筛选图片有序保存
#coding=utf-8 import urllib import re #urllib 模块读取web页面相当于接口,第二次正则表达试提图片 def gethtml(url): #定义一个gethtml函数得到页面 page = urllib.urlopen(url) html = page.read() return html #在原来的基础上修改添加正则表达式的语句 src="http://imgsrc.baidu.com/forum/w%3D580/sign=ab2da672e124b899de3c79305e061d59/82777fec54e736d1ac3b007a93504fc2d5626915.jpg" def getimg(html): reg = r'scr="(.+?\.jpg)"pic_ext' imgre = re.compile (reg) imglist = re.findall (imgre,html) #牵扯到异步知识但还不算是,这里按顺序取得图片 x = 0 #return imglist 在原来的基础上添加for循环并保存到本地 for imgurl in imglist: urllib.urlretrieve(imgurl,'%s.jpg' % x) x+=1 html = gethtml("http://tieba.baidu.com/p/4674704187") print getimg(html)
urllib.urlretrieve()保存到本地,通过一个for循环对获取的图片连接进行遍历,为了使图片的文件名看上去更规范,对其进行重命名,命名规则通过x变量加1。保存的位置默认为程序的存放目录。