社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

python实现简单爬虫功能

马哥Linux运维 • 7 年前 • 1146 次点击  


iOS开发如果之前没接触过除了c和c++(c++太难了,不花个十来年基本不可能精通)的语言,第二门语言最好的选择就是Python.原因就是


1.语法简单

2.库太多,随便想要什么功能的库都找得到,简直编程界的哆啦A梦.

3.语法优美,不信?你去看看python超过两千行的代码再回头看看用oc写的超过两千行的代码,oc写的简直丑到极致(没命名空间,点语法调用和括号调用混用).


你如果想自己弄个app,例如每日精选美女之类的app,你服务端总得有图吧,怎么弄?自己用爬虫爬啊,爬到链接了塞到数据库里,传个json,app直接sdwebimage就好了.多爽!


废话不多说.开始写.


我先假设你用的是Mac,然后Mac都预装了python2.x,然后呢,你有了python没用,你得有库.没库怎么干活?怎么安装库呢?


python界也有个类似于我们iOS开发里cocoapods的东西,这个东西叫做pip.


pip和cocoapods用起来的命令都极其类似,我们只需要两个库,一个叫做urllib2,一个叫做Beautifulsoup.

urllib2是干什么的呢?它的作用就是把网页down下来,然后你就可以分析网页了.


Beautifulsoup干什么的呢?你用urllib2把网页down下来了之后,里面都是html+css什么的,你想要从乱七八糟的一堆html里面找到正确的图片链接那可不是件简单的事,据我这几天的学习,做法无非两个,一个是自己写正则表达式然后用一个叫re的python库,另一个是使用lxml解析xpath.这两个说实话都不太好用,一个正则就够你吃一壶的.后来我搜索了很久,发现了一个库叫做Beautifulsoup,用这个库解析html超级好用.


首先配置python环境,安装pip:


然后你们打开terminal敲入下面这个命令.


然后就会自动帮你安装BeautifulSoup这个东西了.urllib2因为是自带的,所以不用你下载了.


好的我们随意打开网页http://www.pcpop.com/doc/1/1279/1279531.shtml,直接右键打开源文件.


你看到的是这些东西.


图片链接就在li这个标签下地img标签里.现在我们需要做的就是尝试着把这种类型的li从所有html中分离出来.我们可以看到li这个标签有个属性叫做class,这个属性的值是class=”span3”,我们把这段话li class=”span3”


搜索一下,我们发现有20个结果.恰巧,我们这个页面的图片也只有20个,那么可以确定的是我们找到了区别于其他标签的唯一性.


再仔细分析下,img这个标签在li这个标签里有且只有一个.那么,也就是说,我们先搜索出所有符合条件的li标签,然后找到里面的img标签就可以找到所有的图片链接了.


然后看代码.


我们来一句一句分析下.其实python的语法超级简单.

凡是#打头的就是python里面的注释语句类似于oc里的//.


分别说明我们的环境是python,编码是utf-8


然后import了四个库,分别是urllib2,urllib,os,和Beautifulsoup库.


导入Beautifulsoup库的方式和其他三个不太一样.我暂时也不清楚为什么python用这种导入方式,不过照猫画虎就行了.


然后def打头的就是定义一个函数,python里面是不用分号做句与句的分隔符的.他用缩进来表示.与def缩进一个tab的都是函数体.


html = urllib2.urlopen('http://www.pcpop.com/doc/1/1279/1279531.shtml').read()


这句很简单,就是读取网页的html.然后把值赋给html这个变量.python里声明变量前面不用加任何东西,不用加声明语句和变量类型,就连JavaScript声明变量还要加个var呢.


我们获取了网页的html之后呢,声明了一个Beautifulsoup变量soup,用来准备解析html.


liResult = soup.findAll('img',attrs={"width":"175"})


这句话的意思就是,寻找html中所有img标签,并且这个img标签有个属性width,width的值是175.


注意这个findAll函数,有点常识的话你应该清楚,凡是带all的函数基本上返回的都是一个数组,所以我们liResult这个变量实际上是一个数组.


for image in liResult:


这句话基本和oc里的遍历数组语法完全一样.就是遍历liResult里的每一个变量.那么每一个变量就是一个标签.


link = image.get('src')


这句的意思就是,获取img标签里的src属性,src就是我们最想要的图片链接了.


这里定义了一个变量count = 0,然后在 for 循环里面做递加 count += 1,最终把这个值


赋给我们的变量imageName = count,以便后面使用。



这两句,第一句是设置一个文件存放地址,第二句用urllib这个库的urlretrieve这个方法下载我们的图片,并且把图片放到刚才的路径里.


好了,万事具备了,我们现在跑一下我们的脚本


好了,我们的图片就下载完了.


然后在看看下载的内容:



点击图片,了解更多课程详情





——马哥教育,理论与实战并重——

——让你懂,更让你行——




今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/weixin/NF4VMPrQcS
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2059
 
1146 次点击