• Python爬虫学习


    今天开始学习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             print'open & 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还是比较简洁的,易读性也好,唯一有点绕的是正则表达式部分;用的多了也就好了吧。

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

  • 相关阅读:
    购物车好作业
    范例
    三级菜单
    Centos7部署PXE+Kickstart 实现批量安装操作系统
    CentOS 8.x下编译php 7.4、php5.6、php5.3多版本报错处理教程
    CentOS 8.x 编译安装LNMP(Linux + Nginx + MySQL + PHP)架构部署动态网站环境
    CentOS 8.x系统安装配置图解教程
    CentOS6.x 7.x 8.x 服务器系统初始化设置
    VMWare安装CentOS 7系统 & 操作系统优化
    CentOS 7 部署Memcached服务器——超级详细
  • 原文地址:https://www.cnblogs.com/javajava/p/4796863.html
Copyright © 2020-2023  润新知