今天爬取的百度的实时热点排行榜
按照惯例,先下载网站的内容到本地:
因为我习惯把网页整个抓到本地再来分析数据,所以会有这一步,后面会贴直接抓取并分析的代码。
开始分析数据:
我想抓取的排名,关键词和搜索指数这三个值。
打开网页源代码:
发现每个标题的各个元素是一个个td被包装在一个tr标签里面,每一个标题都是一个tr(这里注意前三个标题的tr标签是有class=‘hideline’,而后面的则没有)
排名 :第一个td class=''first'
关键词:第二个td cass = 'keyword'
搜索指数:最后一个td class = 'last'
确定了我所需要的数据的位置了之后,可以开始写代码了。
写一个把打开本地html并返回给BeautifulSoup调用的函数:
这样,我就可以在下面的直接用本地html来测试,而不用每次都去请求百度的服务器了。
因为第一个tr装的是这些东西
并不是排名第一的标题,所以我用切片把它过滤掉了。
然后开始挨个赋值:
这样按道理来说应该是可以输出了,但百度还是想给我一点难度。
这里出现几个问题,
1:AttributeError: 'NoneType' object has no attribute 'get_text'
2:输出的格式
3:只有一个值
按照惯例,第一个问题应该是里面多了一些不是Tag的类型,所以就来测试一下:
输出如下:
我们可以发现前几个值都参杂了NoneType(我去源代码看了一下,并不知道是什么导致的,等以后我知道了,再回来!)
因此,我们只要把NoneType给过滤掉就行。
输出如下:
这样就解决了第一个问题,发现可以输出了,连第三个问题也解决了。
但第二个问题还在,这shit一般的格式让我很难受,导致这样的原因我猜是get_text时把一些空格符和换行符也一起输出了。
所以用replace()就应该可以解决了。
输出如下:
哦吼,这样感觉就不错了。
但强迫症患者感觉还是很难受啊,这个热度(搜索指数)的格式也太乱了。
经过一番搜索,网友的力量还是很强大的啊哈哈哈,马上就有办法了。
输出如下:
本强迫症患者终于满足了哈哈。
附上总代码:
。
。
。
还有直接爬取不用下载网页的总代码:
好了。完成任务,生活愉快!
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com
本文链接:http://www.bhha.com.cn/news/2131.html