Python——爬虫学习2
BeautifulSoup插件的使用
这个插件需要先使用pip安装(在上一篇中不再赘言),然后再程序中申明引用
from bs4 import BeautifulSoup html=self.requests(url)#调用requests函数把套图地址传入会返回一个response 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#的各种参数真是太简洁!!!
import requests from bs4 import BeautifulSoup import os class mzitu(): def __init__(self): 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'} #self.route="D:\GITHUB\学习Python\爬虫基础教程mzitu\mzitu" def all_url(self,url): html=self.requests(url)#调用requests函数把套图地址传入会返回一个response all_a=BeautifulSoup(html.text,'lxml').find('div',class_='all').find('li').find_all('a') for a in all_a: title=a.get_text() print(u'开始保存:',title)#加一点提示,不然太枯燥了 path=str(title).replace("?",'_') path = str(title).replace("?", '_') ##我注意到有个标题带有 ? 这个符号Windows系统是不能创建文件夹的所以要替换掉 if self.mkdir(path):#调用mkdir函数创建文件夹 href=a['href'] self.html(href)#调用html函数把href参数传递过去 print(u'共找到资源:',len(all_a),u'组') def html(self,href): ##这个函数是处理套图地址获得图片的页面地址 html=self.requests(href)#调用requests函数 self.headers['referer']=href max_span=BeautifulSoup(html.text,'lxml').find('div',class_='pagenavi').find_all('span')[-2].get_text() for page in range(1,int(max_span)+1): page_url=href+'/'+str(page) self.img(page_url)#调用img函数 def img(self,page_url): ##这个函数处理图片页面地址获得图片的实际地址 img_html=self.requests(page_url) img_url=BeautifulSoup(img_html.text,'lxml').find('div',class_='main-image').find('img')['src'] self.save(img_url)#调用save函数 def save(self,img_url): ##这个函数保存图片 name=img_url[-9:-4] img=self.requests(img_url) f=open(name+'.jpg','ab') f.write(img.content) f.close() def mkdir(self,path): ##这个函数创建文件夹 path=path.strip() isExists=os.path.exists(os.path.join("D:\GITHUB\学习Python\爬虫基础教程mzitu\mzitu",path))#创建一个存放套图的文件夹 if not isExists: print(u'创建了',path,u'文件夹!') os.makedirs(os.path.join("D:\GITHUB\学习Python\爬虫基础教程mzitu\mzitu",path)) os.chdir(os.path.join("D:\GITHUB\学习Python\爬虫基础教程mzitu\mzitu",path))#切换到目录 return True else: print(u'名字叫做',path,u'的文件夹已经存在了!') return False def requests(self,url): ##这个函数获取网页的response 然后返回 content=requests.get(url,headers=self.headers) return content Mzitu=mzitu()#实例化 Mzitu.all_url('http://www.mzitu.com/all')##给函数all_url传入参数 当作启动爬虫(就是入口)
运行脚本,下载后到文件夹去看看,效果很惊艳!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
手把手教你深度学习强大算法进行序列学习(附Python代码)
序列学习是近年来深度学习的热点之一。从推荐系统到语音识别再到自然语言处理,它的潜力似乎无穷无尽,推动着业界不断创新,涌现出前所未有的解决方案。 序列学习的实现形式多种多样,如机器学习域的马尔可夫模型、有向图等,深度学习域的RNNs/LSTMs等等。 在本文中,我们将使用一种尚不太为人所知的叫做紧致预测树(CompactPredictionTree,CPT)的算法来进行序列学习。这种方法简单得让人吃惊,并且比一些著名算法如马尔可夫、有向图等更为强大。 在深入阅读本文之前,我推荐你先读一读“你必读的序列模型(附用例)”一文,作者Tavish在这篇文章中介绍了序列模型及其典型用例和应用场景。 本文目录: 序列学习入门 紧致预测树算法(CPT) 理解CPT中的数据结构 用CPT进行训练和预测 训练阶段 预测阶段 建模与预测 序列学习入门 当我们需要预测一个事件之后
- 下一篇
JavaScript学习之旅-13( 原创 )
在上一篇文章中,主要学习了JavaScript中的对象以及构造函数的说明和使用,这一篇文章我们主要学习JavaScript的“继承”。关于继承这个特性,JavaScript并不像Java一样有严格的说明,因为在Java中继承是实现拓展父类的功能,将公共的代码进行封装。在上一篇文章也简单提到了“继承”,那么这篇文章就着重描写JavaScript中关于继承的几种实现形式。 首先复习回忆下在上一篇文章,关于继承在JavaScript中的写法: 继承 - 1 首先我们定义了一个cook的对象,这个cook对象里面有姓名字段,也有run函数,接着我们在定义了一个 jack,其中,这个jack 里面仅有一个姓名字段,但是我们希望这个对象可以“继承”cook对象,来使用它的run函数,这个时候,我们可以使用 __proto__ 关键字去实现,这个关键字简单理解就是extends,然后,我们在调用jack对象里面的 run函数。最后通过日志打印的结果可以显示,jack对象成功的使用了cook对象内的run函数。 第二种继承方式是,可以使用Object.create()函数,其中这个括号里面的是我们想要...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Mario游戏-低调大师作品
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群