一直也没写过爬虫的代码,一来是接触练习的少,二来也对爬虫心存偏见:老有种做贼偷数据的感觉。

最近在体验过爬虫的高效便捷后,觉得确实有必要多实践一下。其实我本身学爬虫没多久,远没到分享爬虫技术的水平。但公众号平台嘛,又不是课堂,分享点实战经验和思路,相互交流下心得,也是挺不错的。

今天来分享下这两天写的入门级的爬取知乎热榜和微博热门数据的代码和思路。首先明确下爬虫、知乎热榜和微博热门这些概念。

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

——百度百科,“网络爬虫”

知乎热榜中的内容热度值,是根据该条内容近24小时内的浏览量、互动量、专业加权、创作时间及在榜时间等维度,综合计算得出的。知乎热榜即根据内容热度值制定的排行榜。

知乎热榜链接:https://www.zhihu.com/billboardhttps://www.zhihu.com/hot

微博的热度值是根据该篇微博被转发、点赞数和微博发布时间等各项因素,来算出热度基数,再与热度权重相加,得出最终的热度值。微博热门即话题热度排行榜。

微博热门链接:https://s.weibo.com/top/summary

今天我们要做的就是将相关排行榜中的话题内容爬取下来当作数据素材。换句话说,我们要把页面上排好的信息,通过代码读取并保存起来。

1. 爬取网页内容

Python 爬虫通常采用 requests 库来处理网络请求。这里关于 requests 的方法和参数暂不展开。

知乎热榜

微博热门

这里有两点要注意:

  1. 我们选用的网址链接在未登录状态下也可访问,因此 requests 方法中的参数为空也不影响。但爬虫时更多的情况是需要登陆状态,因此也就要求通过设置不同参数来模拟登陆去进行相关操作。
  2. 通过 requests 模块获取的网页内容,对应的是在网站上右键单击,选择“显示网页源代码”后展现的页面。它与我们实际看到的网页内容或者 F12 进入开发者模式中看到的网页 elements 是不同的。前者是网络请求后返回结果,后者是浏览器对页面渲染后结果。

2. 解析爬到的内容

第一步爬到的是整个页面内容,接下来要在所有内容中去对目标定位,然后将其读取并保存起来。

这里我采用的是 BeautifulSoup,因为学爬虫最先接触这个,用起来也蛮顺手。通过 BeautifulSoup 提供的方法和参数,可以很便捷定位到目标。

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间。

Beautiful Soup 4.4.0 文档;https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

之前讲到爬虫所获取的网页对应的是网页源代码,那么在定位网页中目标时可以结合网页源代码来制定解析策略。

这里提一点特别的,在知乎热榜的网页源代码中,拉到最下方可以看到如下:

在源代码中网页的 script 部分,有现成的整理好的热榜数据。所以我们为了减少工作量,直接通过 BeautifulSoup 取出 script 中内容,再用正则表达式匹配热榜数据列表处的内容。

import requestsimport refrom bs4 import BeautifulSoup
headers={"User-Agent":"","Cookie":""}zh_url = "https://www.zhihu.com/billboard"zh_response = requests.get(zh_url,headers=headers)
webcontent = zh_response.textsoup = BeautifulSoup(webcontent,"html.parser")script_text = soup.find("script",id="js-initialData").get_text()rule = r'"hotList":(.*?),"guestFeeds"'result = re.findall(rule,script_text)
temp = result[0].replace("false","False").replace("true","True")hot_list = eval(temp)print(hot_list)

这里我利用了 script 中热榜数据的列表结构,在定位取出相关字符串后,先将 js 中的 true 和 false 转化为 Python 中的 True 和 False,最后直接通过 eval() 来将字符串转化为直接可用的数据列表。

运行代码结果如图:

至于对微博热门的解析,就是中规中矩地利用 BeautifulSoup 来对网页元素进行定位获取:

import requestsfrom bs4 import BeautifulSoupurl = "https://s.weibo.com/top/summary"headers={"User-Agent":"","Cookie":""}wb_response = requests.get(url,headers=headers)webcontent = wb_response.textsoup = BeautifulSoup(webcontent,"html.parser")index_list = soup.find_all("td",class_="td-01")title_list = soup.find_all("td",class_="td-02")level_list = soup.find_all("td",class_="td-03")
topic_list = []for i in range(len(index_list)):    item_index = index_list[i].get_text(strip = True)    if item_index=="":        item_index = "0"    item_title = title_list[i].a.get_text(strip = True)    if title_list[i].span:        item_mark = title_list[i].span.get_text(strip = True)            else:        item_mark = "置顶"    item_level = level_list[i].get_text(strip = True)    topic_list.append({"index":item_index,"title":item_title,"mark":item_mark,"level":item_level,"link":f"https://s.weibo.com/weibo?q=%23{item_title}%23&Refer=top"})print(topic_list)

通过解析,将微博热门数据逐条存入列表中:

后续对拿到的数据加以处理展示,即可得到很多有趣的应用或实现某些功能。例如集成诸多平台排行榜的 “今日热榜”:

今日热榜链接:https://tophub.today

因为并未展开爬虫细节,今天的总结也比较简单:

  1. 首先在选取要爬的网址时要给自己降低难度,例如同样是知乎热榜,zhihu.com/hot 需要登陆,而 zhihu.com/billboard 无需登录便可访问
  2. 解析爬取到的内容时,要结合具体页面内容选择最便捷的方式。当需要批量爬取相似页面时,也要尽量整理通用的解析策略。
代码已上传 GitHub,链接如下:https://github.com/pengfexue2/hot_display.git

当然,拿到数据只是开始,后续如何去处理才是关键和价值所在,之后我们继续探讨。

用 Python 监控知乎和微博的热门话题!相关推荐

  1. python微博热点_用 Python 监控知乎和微博的热门话题

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: TED Crossin的编程教室 PS:如有需要Python学习资料 ...

  2. 【过分】Python监控小姐姐/小哥哥微博,了解一下??

    ​ ​微博剧情需要: 之前我发现我微博有三个好友,但是中间那个我压根都不认识,第一个是关我的,我知道有互动,第三个是好友,那第二个那个是谁? 中间那个既不互动也没关注,我进去看了发现和我追过一部戏喜欢 ...

  3. 女友老背着我玩手机,感觉要被绿啊!吓得我赶紧写了个Python监控她的微博!

    由来 最近下班回到家,女朋友都坐在沙发上玩手机,我习惯的坐她旁边,头枕着她的腿,借此来休息一下.然后发现她边看边笑,于是就问到,你刷到啥了,这么好笑给我看看,她立马就说:没有,就是刷了两下微博.以前她 ...

  4. python爬虫 知乎热榜、微博热搜并发送邮件至邮箱

    目录 爬取知乎热榜.微博热搜并发送邮件至邮箱 1.获取网页 1.1获取url 1.2构造headers 1.3代码 2.提取信息 2.1 XPath规则 2.2 定位到节点 2.3 提取标题和url ...

  5. Python监控目录文件夹,并使用SFTP上传目录及文件到linux服务器

    Python 扫描监控本地文件夹并进行超大文件上传 方案1:WebUploader大文件分块多线程并发上传 方案2:watchdog目录文件夹监控,paramiko STFP上传服务器 方案3:优化2 ...

  6. python键盘输入代码,python监控键盘输入实例代码

    本文研究的主要是python监控键盘输入的相关代码,用到了os,sys,time等,具体实现代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- im ...

  7. Python监控目录和文件变化

    原文:https://www.cnblogs.com/lcamry/p/8392376.html Python监控目录和文件变化 一.os.listdir import os, time path_t ...

  8. python监控进程状态_python监控进程脚本

    本文实例为大家分享了python监控进程脚本的具体代码,供大家参考,具体内容如下 原理: 监控一个指定进程,每隔5秒钟获取其CPU.内存使用量超过60%即kill掉该进程,获取其句柄数,超过300也k ...

  9. python课设总结_Python技术分享课总结:用Python模拟知乎自动登录

    原标题:Python技术分享课总结:用Python模拟知乎自动登录 Python语言是由Guido van Rossum大牛在1989年发明,它是当今世界最受欢迎的计算机编程语言之一,也是一门&quo ...

最新文章

  1. 甲骨文正式发布Java 14(Oracle JDK 14)
  2. GDCM:gdcm::EnumeratedValues的测试程序
  3. 《江湖X:汉家江湖》游戏论剑系统技术全解析
  4. android adb wifi
  5. 怎么把网页保存到本地计算机,在IE浏览器中,将网页保存到本地计算机中,若只需保存其中的文字、超链接和表格信息,应该选择的保存类型为( )...
  6. 书脊开胶了用什么胶粘_鞋子开胶还傻傻用502粘?劝你别做无用功,用这笨招天天穿新鞋...
  7. PHP date() 函数
  8. [转]VC工程文件说明
  9. Visio搜索形状显示无匹配项的解决方法
  10. 华为模拟器linux,华为模拟器命令.doc
  11. 机器视觉检测:电阻电容的二次筛选提高效率及达成环保目的
  12. 用Python怎样实现Excel中的公式向下填充?
  13. 用PROTUES来演示80C51的的16MHZ晶振的示波器演示
  14. python修改游戏数据_python1.2-----pywin32模块/语音合成,窗口闪烁以及修改游戏数据的技巧...
  15. Android项目开发Crime
  16. 网络诊断请将以太网电缆插入计算机咋回事,总是提示网络电缆被拔出是怎么回事?...
  17. 原生js实现循环精灵图
  18. win10内置录音机无法录制网页视频声音
  19. 自动写字成图5款有趣实用的AIGC工具分享
  20. 客户之前使用的其他财务软件,现在需要把其他软件的财务凭证导入到用友T3软件中使用,如何能快速实现。

热门文章

  1. $ NON-NLS-1 $是什么意思?
  2. postgis的扩展包fuzzystrmatch和postgis_tiger_geocoder的安装
  3. PhotoZoom中如何调整预设
  4. java+mysql 基于ssm的医院预约挂号系统(java ,web)
  5. 梦幻之旅--地图编辑器开发
  6. 大数据里的春节出行:用户关注封城,返程高峰提前
  7. CTFshow DJBCTF MISC(大吉杯) WP
  8. 【软件工程大作业】快递代拿小程序项目 (第十组)
  9. java编程语言的优点
  10. Black Hat Europe 2021议题解读:Wi-Fi Mesh中的安全攻击面