提取国家地理图片总结之二

本文介绍了一种爬取国家地理网站从2001年至2009年每日图片的方法,通过Python脚本实现,并处理了HTTP 404错误,确保了图片的有效下载。
     在完成得到某一年所有图片之后,不由得想优化一下:把国家地理历年来的每日图片都取回来。上网搜索了一下,国家地理每日图片是从2001年开始的,我们可以继续优化得到以下的代码:
ContractedBlock.gifExpandedBlockStart.gifCode  urltemplate = 'http://photography.nationalgeographic.com/ngs_pod_ext/searchPOD.jsp?month=%d&day=%d&year=%d&page=' 
urlList 
= [urltemplate %(month, day, year) for month in range(113for day in range(132for year in range(20012010)] 

这个时候遇到一个问题,有些请求会返回HTTP Status 404, 就需要对response进行处理,不存在的文件要跳过。
ContractedBlock.gifExpandedBlockStart.gifCode
    import urllib2 
    req 
= urllib2.Request(url)
    
try:
        response 
= urllib2.urlopen(req)
    
except URLError, e:
        
print url
        
print "\n has error: ", e.code
        
print "\n"
        
continue
except语句可以打印出对应的链接,以及对应的error code,事后可以验证这种处理的正确性。
详细代码如下:
ContractedBlock.gifExpandedBlockStart.gifCode
#!/usr/bin/env python
#
coding=utf-8
from urllib2 import Request, urlopen, URLError, HTTPError
import re 
import urllib 
urltemplate 
= 'http://photography.nationalgeographic.com/ngs_pod_ext/searchPOD.jsp?month=%d&day=%d&year=%d&page=' 
urlList 
= [urltemplate %(month, day, year) for month in range(113for day in range(132for year in range(20012010)] 
# 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
    import urllib2 
    req 
= urllib2.Request(url)
    
try:
        response 
= urllib2.urlopen(req)
    
except URLError, e:
        
print url
        
print "\n has error: ", e.code
        
print "\n"
        
continue
    txt 
= response.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:\\National Geographic\\"+n1[-1])
将以上代码保存为.py文件,然后就可以得到国家地理每日图片了,就是时间稍微久了点。注意修改最后一行文件保存目录。
继续改进目标:
1. 使用PyQt4做出漂亮UI版本
2.

转载于:https://www.cnblogs.com/bluescorpio/archive/2009/09/04/1560626.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值