先看一张图
相比起学习日历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嵌套使用就是这样咯,更加能精确定位我需要的数据
今天换了一个风格来写小文,发现加入图片真的挺有趣的,哈哈,至少不会想前面的一样看起来晦涩。我是不是太机智了