[脚本收集]提取国家地理图片

1. 利用urllib2.urlopen取得页面的内容
2. 利用正则表达式取得src标签为.jpg的URL
3. 保存图片


urllib2是python的一个获取url(Uniform Resource Locators,统一资源定址器)的模块。它用urlopen函数的形式提供了一个非常简洁的接口。这使得用各种各样的协议获取url成为可能。它同时 也提供了一个稍微复杂的接口来处理常见的状况-如基本的认证,cookies,代理,等等。这些都是由叫做opener和handler的对象来处理的。

高级功能:
1. 注意http://photography.nationalgeographic.com/ngs_pod_ext/searchPOD.jsp?month=08&day=26&year=2009&page=
最好能实现把某年的所有图片都一个一个保存下来(省掉多少Save的

ContractedBlock.gif ExpandedBlockStart.gif Code
#!/usr/bin/env python
#
coding=utf-8
import urllib2 
import re 
import urllib 
urltemplate 
= 'http://photography.nationalgeographic.com/ngs_pod_ext/searchPOD.jsp?month=%d&day=%d&year=2009&page=' 
urlList 
= [urltemplate %(month, day) for month in range(113for day in range(132)] 
# define a regex to get the img src 
imgre = '<img alt="(?P<alt>[^"]*)" src="(?P<src>/staticfiles/NGS/Shared/StaticFiles/Photography/Images/POD/.+?-ga.jpg)">' 
= re.compile('<img.+?>.+?</a>', re.I|re.S) 
for url in urlList: 
    
# get page html 
    page = urllib2.urlopen(url) 
    txt 
= page.read() 
    
#page.close() 
    m = p.findall(txt) 
    imgre 
= '<img alt="(?P<alt>[^"]*)" src="(?P<src>/staticfiles/NGS/Shared/StaticFiles/Photography/Images/POD/.+?-ga.jpg)">'  
    
for n in m: 
        p1
=re.compile(imgre, re.I|re.S) 
        m1
= p1.search(n) 
        
if(m1!=None): 
            tmp
=m1.group(2
            url
="http://photography.nationalgeographic.com/" + tmp 
            n1
=tmp.split("/"
            urllib.urlretrieve(url,
"D:\\My Work\\"+n1[-1])

工作啊)
2. 把获得的图片保存在制定目录下
3. 实现GUI获取指定网址下图片(比如163相册,Tripntale相册)

1. 初始版本:只能得到图片的信息,并没有真正保存到本地.

ContractedBlock.gif ExpandedBlockStart.gif Code
import urllib2
import re

# get page html
page = urllib2.urlopen("http://photography.nationalgeographic.com/ngs_pod_ext/searchPOD.jsp?month=06&day=10&year=2009&page=")
txt 
= page.read()
#txt2 = page.read()
page.close()

# define a regex to get the img src
imgre = '<img alt="(?P<alt>[^"]*)" src="(?P<src>/staticfiles/NGS/Shared/StaticFiles/Photography/Images/POD/.+?-ga.jpg)">'

# define a regex to get summary
summaryre = '<div class="summary">\s*<h1 class="podsummary">(?P<podsummary>[^<h>]*)</h1>\s*<p class="credit">(?P<credit>[^</>]*)</p>\s*<div class="description">(?P<desc>.*?)<div style="float:right'

# get img alt and source
m2 = re.search(imgre, txt)
if m2 is not None:
    
print "get picture alt is '%s', src is 'http://photography.nationalgeographic.com%s'" % \
          (m2.group(
"alt"), m2.group("src"))

# get description
m3 = re.search(summaryre, txt, re.I|re.M|re.S)
if m3 is not None:
    
print "photo desc: summary is '%s', credit by '%s', desciption is '%s'" % (m3.group("podsummary"), m3.group("credit"), m3.group("desc"))

2. 优化后的版本,对页面所有img标签进行过滤,并查出每日一图的照片,保存到本地目录。

ContractedBlock.gif ExpandedBlockStart.gif Code
import urllib2
import re
import urllib
# get page html
page = urllib2.urlopen("http://photography.nationalgeographic.com/ngs_pod_ext/searchPOD.jsp?month=08&day=26&year=2009&page=")
txt 
= page.read()
page.close()

# define a regex to get the img src
imgre = '<img alt="(?P<alt>[^"]*)" src="(?P<src>/staticfiles/NGS/Shared/StaticFiles/Photography/Images/POD/.+?-ga.jpg)">'

= re.compile('<img.+?>.+?</a>', re.I|re.S)
= p.findall(txt)

imgre 
= '<img alt="(?P<alt>[^"]*)" src="(?P<src>/staticfiles/NGS/Shared/StaticFiles/Photography/Images/POD/.+?-ga.jpg)">'
for n in m:
    p1
=re.compile(imgre, re.I|re.S)
    m1
= p1.search(n)
    
if(m1!=None):
        tmp
=m1.group(2)
        url
="http://photography.nationalgeographic.com/" + tmp
        n1
=tmp.split("/")
        urllib.urlretrieve(url,
"D:\\My Work\\"+n1[-1])

 

3. 在考虑如何保存到本地的时候, 遇到一个问题,在嵌套参数化month和day,其中month在(1,13)之间,day在(1, 32)之间,这个时候我一直不知道该怎么去操作,在chinaunix问了,也没人理我,估计是因为问题太简单。。。

    后来在详细研究语法的时候看到print [(x, y) for x in range(3) for y in range(3)],我才恍然大悟,原来还可以这样用啊,于是就产生了一下的版本:(还没来得及调,待调试通过,我会更新,不过基本思路是一样的)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
把网上电子地图图片下载到本地. 因为网上电子图片是分缩放级别的,可以直接将所有级别或才定制级别的图片下载下来,会放到相应的文件夹里面.可供使用百度地图引擎的程序直接使用. 不好意思,定这么高的分,如果您分不够,可以给我发邮件,我把程序发给您. 双面GetBaiduMapPic\bin\Debug\GetBaiduMapPic.exe来运行程序, 第一步:填写好经度开始,经度结束。 第二步:填写好纬度开始,纬度结束。 第三步:选择缩放级别开始,也就是从第几级的缩放开始下载。 第四步:选择绽放级别结束,也就是到第几级的缩放结束下载。百度的地图缩放是0-13个级别,我们可以从中选择。只要开始不要大于结束即可。 第五步:点击“开始生成URL”按钮。此时在下面左边的列表里面会显示出生成要下载的图片地址列表。 第六步:点击“选择存储位置”按钮,找到一个位置,用来存放配置文件及要下载的图片的位置。不要忘记文件名处要填写一个名字,自己随意起就好了。填好后点击保存。 第七步:点击“导出XML”按钮,这样便会将刚刚显示的要下载的文件列表保存到了XML文件中。 第八步:点击“开始获取”按钮,便会将百度的电子地图图片下载到本地了。就是您刚才放置XML文件位置。 如果有失败的地址,则点击“失败地址导出XML”,便可以将地址导出。以便重新进行读取下载。 在使用中如果遇到问题可以致 Email:lyx830621@163.com 声明:本程序只用作技术研究,软件使用自愿,若引起百度等网站纠纷与本人无关,请自行决定是否使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值