BeautifulSoup插件的使用

这个插件需要先使用pip安装(在上一篇中不再赘言),然后再程序中申明引用

  1. from bs4 import BeautifulSoup
  2.  
  3. html=self.requests(url)#调用requests函数把套图地址传入会返回一个response
  4. all_a=BeautifulSoup(html.text,'lxml').find('div',class_='all').find('li').find_all('a')

这里find方法只会查找第一个匹配的元素,所以返回的是一个对象,find_all方法会查找所有匹配的元素,所以返回的是list

在使用网页文本的时候用text,在下载多媒体文件的时候用content。

正式编程

这里对程序进行了一些封装,方便函数的复用

ps:不得不感叹,python的io操作真的是很好用,简单方便,敲几下键盘就搞定,比起C#的各种参数真是太简洁!!!

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import os
  4.  
  5. class mzitu():
  6.  
  7. def __init__(self):
  8. self.headers={'User-Agent':'Mozilla/5.0(Windows NT 6.2;WOW64)AppleWebKit/535.24(KHTML,like Gecko)Chrome/19.0.1055.1 Safari/535.24'}
  9. #self.route="D:\GITHUB\学习Python\爬虫基础教程mzitu\mzitu"
  10.  
  11. def all_url(self,url):
  12. html=self.requests(url)#调用requests函数把套图地址传入会返回一个response
  13. all_a=BeautifulSoup(html.text,'lxml').find('div',class_='all').find('li').find_all('a')
  14. for a in all_a:
  15. title=a.get_text()
  16. print(u'开始保存:',title)#加一点提示,不然太枯燥了
  17. path=str(title).replace("?",'_')
  18. path = str(title).replace("?", '_') ##我注意到有个标题带有 ? 这个符号Windows系统是不能创建文件夹的所以要替换掉
  19. if self.mkdir(path):#调用mkdir函数创建文件夹
  20. href=a['href']
  21. self.html(href)#调用html函数把href参数传递过去
  22. print(u'共找到资源:',len(all_a),u'组')
  23.  
  24. def html(self,href): ##这个函数是处理套图地址获得图片的页面地址
  25. html=self.requests(href)#调用requests函数
  26. self.headers['referer']=href
  27. max_span=BeautifulSoup(html.text,'lxml').find('div',class_='pagenavi').find_all('span')[-2].get_text()
  28. for page in range(1,int(max_span)+1):
  29. page_url=href+'/'+str(page)
  30. self.img(page_url)#调用img函数
  31.  
  32. def img(self,page_url): ##这个函数处理图片页面地址获得图片的实际地址
  33. img_html=self.requests(page_url)
  34. img_url=BeautifulSoup(img_html.text,'lxml').find('div',class_='main-image').find('img')['src']
  35. self.save(img_url)#调用save函数
  36.  
  37. def save(self,img_url): ##这个函数保存图片
  38. name=img_url[-9:-4]
  39. img=self.requests(img_url)
  40. f=open(name+'.jpg','ab')
  41. f.write(img.content)
  42. f.close()
  43.  
  44. def mkdir(self,path): ##这个函数创建文件夹
  45. path=path.strip()
  46. isExists=os.path.exists(os.path.join("D:\GITHUB\学习Python\爬虫基础教程mzitu\mzitu",path))#创建一个存放套图的文件夹
  47. if not isExists:
  48. print(u'创建了',path,u'文件夹!')
  49. os.makedirs(os.path.join("D:\GITHUB\学习Python\爬虫基础教程mzitu\mzitu",path))
  50. os.chdir(os.path.join("D:\GITHUB\学习Python\爬虫基础教程mzitu\mzitu",path))#切换到目录
  51. return True
  52. else:
  53. print(u'名字叫做',path,u'的文件夹已经存在了!')
  54. return False
  55.  
  56. def requests(self,url): ##这个函数获取网页的response 然后返回
  57. content=requests.get(url,headers=self.headers)
  58. return content
  59.  
  60. Mzitu=mzitu()#实例化
  61. Mzitu.all_url('http://www.mzitu.com/all')##给函数all_url传入参数 当作启动爬虫(就是入口)

运行脚本,下载后到文件夹去看看,效果很惊艳!

Python——爬虫学习2的更多相关文章

  1. python爬虫学习(1) —— 从urllib说起

    0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...

  2. python爬虫学习 —— 总目录

    开篇 作为一个C党,接触python之后学习了爬虫. 和AC算法题的快感类似,从网络上爬取各种数据也很有意思. 准备写一系列文章,整理一下学习历程,也给后来者提供一点便利. 我是目录 听说你叫爬虫 - ...

  3. Python爬虫学习:三、爬虫的基本操作流程

    本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:三.爬虫的基本操作与流程 一般我们使用Python爬虫都是希望实现一套完整的功能,如下: 1.爬虫目标数据.信息: 2.将 ...

  4. Python爬虫学习:四、headers和data的获取

    之前在学习爬虫时,偶尔会遇到一些问题是有些网站需要登录后才能爬取内容,有的网站会识别是否是由浏览器发出的请求. 一.headers的获取 就以博客园的首页为例:http://www.cnblogs.c ...

  5. Python爬虫学习:二、爬虫的初步尝试

    我使用的编辑器是IDLE,版本为Python2.7.11,Windows平台. 本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:二.爬虫的初步尝试 1.尝试抓取指定网页 ...

  6. 《Python爬虫学习系列教程》学习笔记

    http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己 ...

  7. python爬虫学习视频资料免费送,用起来非常666

    当我们浏览网页的时候,经常会看到像下面这些好看的图片,你是否想把这些图片保存下载下来. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片点击鼠标右键的时候并没有另存为选项,或者你可以通过截图工 ...

  8. python爬虫学习笔记(一)——环境配置(windows系统)

    在进行python爬虫学习前,需要进行如下准备工作: python3+pip官方配置 1.Anaconda(推荐,包括python和相关库)   [推荐地址:清华镜像] https://mirrors ...

  9. [转]《Python爬虫学习系列教程》

    <Python爬虫学习系列教程>学习笔记 http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多. ...

  10. python爬虫学习01--电子书爬取

    python爬虫学习01--电子书爬取 1.获取网页信息 import requests #导入requests库 ''' 获取网页信息 ''' if __name__ == '__main__': ...

随机推荐

  1. 「CodeChef - SKIRES」Ski Resort

    题目链接 戳我 \(Description\) 给你一个\(n*m\)的网格,以及网格上的两个格子\(A,B\).每个格子有一个高度.每次操作可以选择一个格子(不能是\(A\)或\(B\))并将它的高 ...

  2. RabbitMq初探——消息确认

    消息确认机制 前言 消息队列的下游,业务逻辑可能复杂,处理任务可能花费很长时间.若在一条消息到达它的下游,任务刚处理了一半,由于不确定因素,下游的任务处理进程 被kill掉啦,导致任务无法执行完成.而 ...

  3. Vulnhub Acid

    1.信息收集 1.1.netdiscover netdiscover -i eth0 -r 192.168.118.0/24 1.2. Nmap nmap -sP -T4 192.168.118.0/ ...

  4. lamp-linux-1

    LAMP编程之Linux(1) LAMP:Linux Apache MySQL PHP LNMP:Linux Nginx MySQL PHP WAMP:Windows Apache MySQL PHP ...

  5. 【vue】——CDN或全局引入CSS、JS。

    在入口文件index.html中添加 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  6. [实战] 给现有的NGINX二进制RPM包加新模块

    [实战] 给现有的NGINX二进制RPM包加新模块 一.前言 在做 wiki 的镜像,这样以后文章就可以使用外链了(链接直接跳转墙内小站). 遇到的问题就是:我的 NGINX 包安装的时候图方便采用 ...

  7. IE下判断IE版本的语句...[if lte IE 6]……[endif](用户判断IE版本的如果小于6就显示)

    <!--[if lte IE 6]> <![endif]--> IE6及其以下版本可见   <!--[if lte IE 7]> <![endif]--> ...

  8. 使用 Hexo + github 搭建个人博客

    来自:http://www.cnblogs.com/fengzheng/p/8031518.html Hexo 是什么 Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或 ...

  9. Oracle to_char的用法

    The following are number examples for the to_char function. to_char(1210.73, '9999.9') would return ...

  10. Description &&debugDescription && runtime(debug模式下调试model)

    description 在开发过程中, 往往会有很多的model来装载属性. 而在开发期间经常会进行调试查看model里的属性值是否正确. 那么问题来了, 在objective-c里使用NSLog(& ...