设为首页 加入收藏

TOP

python爬虫学习日历4【基于ubuntu系统】select嵌套使用 简书爬虫
2017-09-30 17:26:22 】 浏览:9233
Tags:python 爬虫 学习 日历 基于 ubuntu 系统 select 使用 简书

   先看一张图

  相比起学习日历3中的爬作者,爬标题,我又增加了爬分类,爬阅读量,谈论量和收藏量

  而按照昨天的方法去搜索,我给它加入了select的嵌套语句,一层一层的搜索到我们想要的数据

  先放一张对比图,左边是日历3中的2二次select【先搜范围再精确】右边多次select

   完全看不出区别好不好~~

  别和我急,我要给你们一一道来

  在学习日历3中,我们搜索 标题 和搜索 作者 都是先确定一个大方框[.content]然后再搜索 作者[.blue-link]和标题[.title] 出来的,这些标签我们都是用SelectorGadget应用搜索的。

  但是这次,我们不用SelectorGadget,直接用上F12开发者来寻找

  

  我们选择的爬虫依旧是简书:打开网页,打开F12,打开python,既然是爬虫就应该把固定的语句[前面学习中的‘固定’]敲上去

import requests
from bs4 import BeautifulSoup
res = requests.get("http://www.jianshu.com/")
soup = BeautifulSoup(res.text)

  现在soup就存好了我们网页的HTML编码元素

  接着在用F12去查看标签

  这个大标签:.content直接显示出来了,而所有的我需要的数据都是这个大标签里面的

for item in soup.select('.content'):

 

 

  好了,这里加入

print item.select('.blue-link')[0].text,'<',item.select('.title')[0].text,'>'

  日历3的工作就全部结束了   

  现在开始嵌套,得到访问量,讨论量和收藏量

  继续在简书用使用F12 瞄准范围

  

  在[.meta]这个标签中,含有[.collection-tag][a][a][span]标签

  比如我要从[.meta]中搜索[.collection-tag]。item是一个总的大标签

item.select('.meta')[0].select('.collection-tag')[0].text

  后面的同理,因为a标签是两个相当于是数组,但是如果我们关注下在F12模式下的[.collection-tag]这个标签也是a标签

<a class="collection-tag" target="_blank" href="/c/1ccb587e5126">手帐圈</a>

  只是用class标识了

  既然前三个都是a标签,用数组的方式标识即可,a[0],a[1],a[2]分别代表分类,访问,讨论

item.select('.meta')[0].select('a')[1].text #访问量
item.select('.meta')[0].select('a')[2].text #讨论量

  还有一个自然就是收藏量了

item.select('.meta')[0].select('span')[0].text #收藏量

  现在需要的代码工作就搞定了

  在print中把之前的代码全部写上去 

print item.select('.meta')[0].select('.collection-tag')[0].text, item.select('.blue-link')[0].text, '<',item.select('.title')[0].text, '>', item.select('.meta')[0].select('a')[1].text, item.select('.meta')[0].select('a')[2].text,item.select('.meta')[0].select('span')[0].text

  这怎么和想象的不一样呀...

  现在的问题的就是需要用str.replace(old, new[, max])这个语句来把所有的换行符‘\n’换掉

  观察下刚刚的爬虫,a标签上和span标签上都有换行  

item.select('.meta')[0].select('a')[1].text.replace("\n","")
item.select('.meta')[0].select('a')[2].text.replace("\n","")
item.select('.meta')[0].select('span')[0].text.replace("\n","")

  再次更正print

   print item.select('.meta')[0].select('.collection-tag')[0].text,item.select('.blue-link')[0].text,'<',item.select('.title')[0].text,'>',item.select('.meta')[0].select('a')[1].text.replace("\n",""),item.select('.meta')[0].select('a')[2].text.replace("\n",""),item.select('.meta')[0].select('span')[0].text.replace("\n","")

  select嵌套使用就是这样咯,更加能精确定位我需要的数据

 

  今天换了一个风格来写小文,发现加入图片真的挺有趣的,哈哈,至少不会想前面的一样看起来晦涩。我是不是太机智了

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇python第九十天----jquery 下一篇进程与线程的区别

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目