码迷,mamicode.com
首页 > 其他好文 > 详细

我的第一个爬虫

时间:2015-09-08 21:42:00      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

刚好把Python基础篇看完了,发现还是有很多没看懂滴!就想试试写第一个非常简单的爬虫来感受一下

  • 爬虫也就是爬网页的意思,其实就是根据Url来获取它的网页信息,虽然在我们的浏览器看着是排版非常优美、明确、简单的画面,但其实是由伟大的浏览器解释才呈现出来滴,实际上它是一段HTML代码和Java Script、CSS而已
  • 如果把网页比作成一个人,那么HTML则是人的骨架,Java Script则是人身上的各个地方的肌肉,CSS则是它的衣服、裤子、鞋子。所以最重要部分在于HTML(骨架)
  • 在日常上网浏览网页的时候,经常会看到一些好看的图片,将这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材,我的这个第一个python脚本将是来爬图片
  • 非常感谢"虫师"和"静觅"教程的指导

获取整个页面的数据-用三种方法实现

  • 第一种方法
#!/usr/bin/python
#coding = utf-8
#File Name: test.py
#Author: vforbox
#Mail: vforbox@gmail.com
#Created Time: 2015-9-8
import urllib2 
response = urllib2.urlopen("http://tieba.baidu.com/p/2460150866")
print response.read()

	#导入urllib2模块
	‘‘‘调用urllib2模块里面的urlopen方法,传入一个URL,这个网址是百度贴吧的一个页面,协议是HTTP(可以是 FTP,FILE,HTTPS)
	urlopen一般接受三个参数,它的参数为:urlopen(url,data,timeout)
	url:即URL
	data:访问url时要传送的数据
	timeout:默认socket._GLOBAL_DEFAULT_TIMEOUT
	第一个参数URL是必须要传送的,在这个例子里传送了百度贴吧的URL
	执行urlopen方法之后,返回一个response对象,返回信息便保存在这里面
	response对象有一个read方法,可以返回获取到的网页内容‘‘‘
  • 执行一下  
[root@test test]# python test.py

技术分享


  •   第二种方法
#!/usr/bin/python
#coding = utf-8
#File Name: test.py
#Author: vforbox
#Mail: vforbox@gmail.com
#Created Time: 2015-9-8
import urllib2
request = urllib2.Request("http://tieba.baidu.com/p/2460150866")
response = urllib2.urlopen(request)
print response.read()
#urlopen参数可以传入一个request请求,它其实就是一个Request类的实例,构造时需要传入Url,Data
#和上一个比,中间多了一个request对象
#在构建请求时还需要加入好多内容,通过构建一个request,服务器响应请求得到应答,这样显得逻辑上清晰明确
  • 执行一下

技术分享


  •  第三种方法
#!/usr/bin/python
#coding = utf-8
#File Name: test.py
#Author: vforbox
#Mail: vforbox@gmail.com
#Created Time: 2015-9-8
import urllib def setHtml(url): page = urllib.urlopen(url) html = page.read() return html html = setHtml("http://tieba.baidu.com/p/2460150866") print html #Urllib 模块提供了读取web页面数据的接口,可以像读取本地文件一样读取www和ftp上的数据 # 首先,定义了一个setHtml()函数:urllib.urlopen()方法用于打开一个URL地址 # read()方法用于读取URL上的数据,向getHtml()函数传递一个网址,并把整个页面下载下来 # 执行程序就会把整个网页打印输出
  • 执行一下

技术分享


筛选页面中想要的数据  

  • 通过使用f12查看工具,找到图片的地址(后缀名.jpg)

技术分享

 

  • 得到(后缀名.jpg)过后,下面将用正则匹配来筛选
#!/usr/bin/python
#coding=utf-8
#File Name: test.py
#Author: vforbox
#Mail: vforbox@gmail.com
#Created Time: 2015-9-8

import urllib
import re

def Html(url):
    h = urllib.urlopen(url)
    m = h.read()
    return m

def Img(html):
    reg = r‘src="(.+?\.jpg)" pic_ext‘
    imgre = re.compile(reg)
    imglist = re.findall(imgre,html)
    return imglist
html = Html("http://tieba.baidu.com/p/2460150866") print Img(html)
#创建了setImg()函数,用于在获取的整个页面中筛选需要的图片连接。re模块主要包含了正则表达式: #re.compile() 可以把正则表达式编译成一个正则表达式对象 #re.findall() 方法读取html 中包含 imgre(正则表达式)的数据 #运行脚本将得到整个页面中包含图片的URL地址

将页面筛选的数据保存到本地

  • 把筛选的图片地址通过for循环遍历并保存到本地
#!/usr/bin/python
#coding=utf-8
#File Name: test.py
#Author: vforbox
#Mail: vforbox@gmail.com
#Created Time: 2015-9-8

import urllib
import re

def Html(url):
    h = urllib.urlopen(url)
    m = h.read()
    return m

def Img(html):
    reg = r‘src="(.+?\.jpg)" pic_ext‘
    imgre = re.compile(reg)
    imglist = re.findall(imgre,html)
    x = 0
    for i in imglist:
        urllib.urlretrieve(i,‘%s.jpg‘ % x)
        x+=1

html = Html("http://tieba.baidu.com/p/2460150866")
print Img(html)

#这里的核心是用到了urllib.urlretrieve()方法,直接将远程数据下载到本地
#通过一个for循环对获取的图片连接进行遍历,为了使图片的文件名看上去更规范,对其进行重命名,命名规则通过x变量加1
#保存的位置默认为程序的存放目录,程序运行完成,将在目录下看到下载到本地的文件

技术分享 

技术分享

我的第一个爬虫

标签:

原文地址:http://www.cnblogs.com/vforbox/p/4791778.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!