码迷,mamicode.com
首页 > 编程语言 > 详细

Python爬虫学习

时间:2015-09-10 11:03:12      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

今天开始学习Python写个爬虫。

首先,从百度找个实例来看看。

 1 import urllib.request,re,sys,os
 2 def get_bing_backphoto():
 3     if (os.path.exists(photos)== False):
 4         os.mkdir(photos)
 5     for i in range(0,30):
 6         url = http://cn.bing.com/HPImageArchive.aspx?format=js&idx=+str(i)+&n=1&nc=1361089515117&FORM=HYLH1
 7         html = urllib.request.urlopen(url).read()
 8         if html == null:
 9             printopen & read bing error!)
10             sys.exit(-1)
11         html = html.decode(utf-8)
12         reg = re.compile("url":"(.*?)","urlbase",re.S)
13         text = re.findall(reg,html)
14         #http://s.cn.bing.net/az/hprichbg/rb/LongJi_ZH-CN8658435963_1366x768.jpg
15         for imgurl in text :
16             right = imgurl.rindex(/)
17             name = imgurl.replace(imgurl[:right+1],‘‘)
18             savepath = photos/+ name
19             urllib.request.urlretrieve(imgurl, savepath)
20             print (name +  save success!)
21 get_bing_backphoto()

 注意第1行,Python需要import urllib.request,2.x版本是import urllib

第7行,同样3.4版本需要将urllib写为url.request.urlopen(),2.x版本是url.urlopen() ;

否则会报错 AttributeError: ‘module‘ object has no attribute ‘request‘

 

 运行一下,成功抓出17张图片下来,在脚本目录下photo文件夹里。

下面来详细分析一下脚本执行的步骤;

 1.总体结构分为3部分,首先import 工具包,然后定义抓取函数,最后执行此函数。

2.第3、4行,判断当前路径下是否有photo文件夹,没有就make一个。

3. 第5行写一个循环,连续取30个页面,6-14行为每次循环体,将当前页面的图片地址全部取出来;

第12行是重点,究竟是个什么意思,把http://cn.bing.com/HPImageArchive.aspx?format=js&idx=1&n=1&nc=1361089515117&FORM=HYLH1 输入浏览器看看就知道了;

{"images":[{"startdate":"20150908","fullstartdate":"201509081600","enddate":"20150909","url":"http://s.cn.bing.net/az/hprichbg/rb/CoalTitVideo_ZH-CN7865623960_1920x1080.jpg","urlbase":"/az/hprichbg/rb/CoalTitVideo_ZH-CN7865623960","copyright":"大不列颠,苏格兰,煤山雀栖息在地衣覆盖的树枝上 (© NHPA/SuperStock)","copyrightlink":"http://www.bing.com/search?q=%E7%85%A4%E5%B1%B1%E9%9B%80&FORM=hpcapt&mkt=zh-cn","wp":false,"hsh":"e0422c438eb020d7102d69b4405d1cc3","drk":1,"top":1,"bot":1,"hs":[{"desc":"我当然是嘴甜小巧惹人疼的小公举啦,","link":"http://www.bing.com/images/search?q=%E7%85%A4%E5%B1%B1%E9%9B%80&FORM=hphot1&mkt=zh-cn","query":"不然别人怎么会叫我贝儿?","locx":23,"locy":35},{"desc":"pseet~pseet~今天的早饭真好吃,","link":"http://www.bing.com/search?q=%E7%85%A4%E5%B1%B1%E9%9B%80+%E5%8F%AB%E5%A3%B0&FORM=hphot2&mkt=zh-cn","query":"喂喂喂,你不许靠近,tsee see see see see!","locx":37,"locy":37},{"desc":"既然是小公举,","link":"http://www.bing.com/images/search?q=%E9%B8%9F%E7%AC%BC&FORM=hphot3&mkt=zh-cn","query":"当然要住在童话般的屋子里呀。","locx":66,"locy":42}],"msg":[{"title":"今日图片故事","link":"http://www.bing.com/search?q=%E7%85%A4%E5%B1%B1%E9%9B%80&FORM=pgbar1&mkt=zh-cn","text":"煤山雀"}]}],"tooltips":{"loading":"正在加载...","previous":"上一页","next":"下一页","walle":"此图片不能下载用作壁纸。","walls":"下载今日美图。仅限用作桌面壁纸。"}}

 大体可以猜到,此句的作用是取“url”: 和 “urlbase” 之间的部分。

4.第15行,写一个内部for循环,将当前页面所包含的所有图片都取出来(有时候一个页面可能包含多张图片,当然也有可能为空);

第16行,将txt截取出xxx.jpg作为保存文件名。 

第19行真正取回图片。 

 

Python还是比较简洁的,易读性也好,唯一有点绕的是正则表达式部分;用的多了也就好了吧。

第一个爬虫脚本执行成功! 

Python爬虫学习

标签:

原文地址:http://www.cnblogs.com/javajava/p/4796863.html

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