前言
本文只是想记录一下前几天考试的一道练习,题目并不难,主要就是看对于python爬虫中数据解析几个库的灵活使用
题目
爬取百度贴吧热议榜单,获取其中的标题及内容个数
解析题目可知,我们需要获取的是当天百度贴吧的热议榜单的标题和内容个数,我们需要先知道热议榜单的url是什么
这时我们需要对于百度贴吧的页面进行分析
贴吧的网页主页url是https://tieba.baidu.com/
而我们浏览主页面就能发现
这个部分,我们点击查看榜单进入就能拿到热议榜的url为:http://tieba.baidu.com/hottopic/browse/topicList?res_type=1&red_tag=v1884297849
拿到url后我们就可以对页面发起请求,而我们要获取的内容是热议榜页面的热议标题和内容数
也就是这两个数据
我们这时就可以去查看页面网页代码结构了
其中标题和内容分别在topic-name标签下的topic-text和topic-num标签的内容中
因为这两个标签是平行存在的使用bs4可能无法很方便的合并数据,所以尝试后,在数据解析阶段我选择的是使用xpath去获取数据
代码
import requests from lxml import etree
url="http://tieba.baidu.com/hottopic/browse/topicList?res_type=1&red_tag=h0345537855"
headers={ 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36' }
def get_tree(url): res=requests.get(url,headers=headers) res.encoding="utf-8" page_text=res.text tree=etree.HTML(page_text) return tree
test=get_tree(url)
dict={}
li_list=test.xpath("//div[@class='topic-name']")
for li in li_list: title = li.xpath('./a/text()')[0] sum=li.xpath('./span[@class="topic-num"]/text()')[0] dict['title']=title dict['sum']=sum print(dict)
|
运行结果
{'title': '穿山甲从药典中除名', 'sum': '244.2W个内容'} {'title': '多所高校将全额退宿舍费', 'sum': '204.3W个内容'} {'title': 'CSGO白给狂欢节', 'sum': '154.1W个内容'} {'title': '粉丝抵制郑爽演新电影', 'sum': '139.8W个内容'} {'title': '2020百大最美女星', 'sum': '132.1W个内容'} {'title': '青簪行番位之争', 'sum': '98.4W个内容'} {'title': '电饭锅用电脑的电源线会怎样?', 'sum': '77.4W个内容'} {'title': '女儿举报亲妈出轨副局长', 'sum': '74.8W个内容'} {'title': '美国富豪宝藏被发现', 'sum': '65.7W个内容'} {'title': '和历史人物重名', 'sum': '59.4W个内容'} {'title': '女子扮孟婆熬制孟婆汤', 'sum': '54.4W个内容'} {'title': '杨丽萍徒弟水月回应婚礼', 'sum': '45.2W个内容'} {'title': '世卫组织称全球疫情正在恶化', 'sum': '42.1W个内容'} {'title': '90后夫妻住深山生9娃', 'sum': '38.7W个内容'} {'title': '父子扮侠客捡垃圾', 'sum': '35.1W个内容'} {'title': '特朗普称不会解散警察', 'sum': '29.7W个内容'} {'title': '跪杀黑人警察首出庭', 'sum': '29.4W个内容'} {'title': '夫妻把房让给66只猫', 'sum': '24.7W个内容'} {'title': '阿水因病缺席首发', 'sum': '21.4W个内容'} {'title': '高以翔最后一部剧', 'sum': '17.2W个内容'} {'title': '托马斯全旋创造者去世', 'sum': '13W个内容'} {'title': '杨丽萍回应争议', 'sum': '10.1W个内容'} {'title': '情商超级低的男生是怎样的', 'sum': '8.7W个内容'} {'title': '有钱一定快乐吗?', 'sum': '8.6W个内容'} {'title': '女子用自行车撞击女童', 'sum': '8.4W个内容'} {'title': '美国征兵用电竞游戏', 'sum': '7.3W个内容'} {'title': '你有过中二时期吗?', 'sum': '5.5W个内容'} {'title': '新冠肺炎治疗已进入临床试验', 'sum': '4.6W个内容'} {'title': '最后悔氪金的游戏', 'sum': '3.6W个内容'} {'title': '北京拟为见义勇为增加免责', 'sum': '3.1W个内容'}
|
这样就已经达到我们题目的需求了
后续的持久化存储,本人比较懒就不做了
数据意义不大