生成已解析的对象
汤=(,' lxml ')
获取标签信息
=('td ',='td-')标签=('td ',='td-02 ')
获取文本信息
获取子节点的标签信息
标签a
好了,我们只能用这个了。数据刚刚获得。让我们看看解析后的数据。
def analysis(self): ' ' extract data ' ' ' ' results=[]html s=self。get _ html () soup=美丽的汤(html,' lxml ')排名=汤。find _ all ('td ',class_='td-01ranktop ')标记=soup.find_all('td ',class _=' TD-02 ')hots=soup . find _ all(' TD ',class_='td-03')forrank,tag,hotinzip(ranks,tags,hots): results . append((rank . stringifrankelse 0,tag.a.string,tag . span . stringiftag . spanelse 999999,hot.i.stringifhot .
我们通过三个find_all方法获取所有文本,然后通过zip方法将每个组放在自己的列表中。
数据分类
本节添加的数据是按正常顺序排列的,但我不想按正序排列,我想按逆序排列,也就是浏览次数少的那个先。应该怎么做到这一点?我们需要借助python的排序方法来反转排列。
def _ _ sort(self): result=self。analysis()返回已排序(结果,key=lambda x: int (x [2]),reverse=false) # reverse sort
通过排序方法,将阅读量指定为排序关键字,实现逆序排列。
显示数据
数据已经采集整理好了,接下来需要展示采集到的数据。
我们需要以漂亮的形式显示数据,如下所示:
实现以下自写文字比较麻烦。我们可以使用python中可移植的第三方库来实现这种表单打印。
首先,让我们安装它。
pipinstallprettytable
然后编写代码来显示数据:
from prettableimportpittle table b=pittle table()sorts _ data=self。_ _ sort()TB . field _ name='排名,热门话题,阅读人数,热点类型'。split(',')foriinimports _ data:tb。add _ row (I)
然后我们执行了,很快执行结果出来了,结果打印出来了,但是报错了。
递归错误: maximumrecursiondepthe xceededincomparison
超过最大递归次数,什么鬼?这个问题我找了很久,终于找到问题了
在第1253行和第1255行可编辑的源代码中,
有一个深度复制方法,我们可以去掉它。
至于为什么,原因是在python中deepcopy是深度副本,也是浅层副本。不同的是复制完成后和原来的变量不一样,内存地址改变。这样一来,在运行过程中每次都会不断复制sorts_data列表,然后每次内存地址都不一样,总是会被执行,我们就陷入递归调用了。所以我们只需要删除这个深度复制方法,执行时不会有最大递归错误报告。
功能移除后,一切正常运行。
执行源代码
至此,我们的爬虫完成了。不要说太多废话。直接上源代码。希望能在录音的同时帮到你。
#!/usr/bin/env python 3 #-*-coding : utf-8-*-IMPORTrequestsfrombs 4 IMPORTDISPLATEllUSOupfromtableIMPORTYtabletClassWeibotop(object): def _ _ init _ _(self): self . URL=' 3359s.weibo.com/top/summary' #微博热搜地址defget_html(self): ' ' '获取web内容' ' ' r=requests . get(self . URL)Returner。textdef analysis(self): ' ' ' extract data ' ' ' results=[]html s=self。get _ html () soup=美丽的汤(html,' lxml ')排名=汤。find _ all ('td ',class_='td-01ranktop ')标记=soup.find_all('td ',class _=' TD-02 ')hots=soup . find _ all(' TD ',class_='td-03')forrank,tag,hotinzip(ranks,tags,hots): results . append([rank . stringifrankelse ' ',tag.a.string,tag . span . stringiftag . spanelse 9999999,Hot.i.stringi fhot .analysis () returnsorted (result,key=lambdax3360 int (x [2]),Reverse=False)# Reverse order defshow(self): ' ' show data ' ' ' TB=漂亮表()_ sorts _ data=self。_ _ sort()TB . field _ name='排名,热门话题,阅读人数,热点类型'。split(',')for iin sorts _ data : TB . add _ row(I)print(TB)if _ _ name _ _==' _ _ main _ _ ' : wt=Weibotop(). show()
Python用途太多,需要学习的方向也很多,以后就不再以爬行类为重点了。
相关阅读
版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除
标签: #爬去微博热门事件