GitHub | 您所在的位置:网站首页 › 北大树洞怎么注册啊 › GitHub |
原文地址
http://www.arthals.ink/?p=62 前因事情的起因是这样的,思修课程写论文,有个可选题目为网络行为规范,我也就因而想整点花活,试着用自己粗浅的Python技术,爬取北大树洞(https://pkuhelper.pku.edu.cn/hole/) 上的内容,并调用百度NLP情绪分析API对样本进行分析。 然而,因为我的技术实在只能算个菜鸟,所以也算是半摸索半做,终于花了两三天才完成了。 以下记录详细的实现过程。 爬虫部分考虑到整个流程需要登陆、下拉等操作,再加上熟悉度的缘故,我选择了使用Selenium库来进行操作,敲了几次初版后,我居然发现这玩意更新到4.0.0版本了: zhuozhiyongde@shengxiayuyanhua ~ % pip3 show selenium Name: selenium Version: 4.0.0 Summary: None Home-page: https://www.selenium.dev 相较于3.0版本,4.0版本提供了更多的操作,并且将以往的find_element(s)_by_xxx(str)的定位方法整合到了新的函数find_element(s)(By.xxx,str),显得更加简洁了。 而在实现过程中,最难的无非是确定各种定位方法,以及通过正则表达式匹配一些自己想要的东西,在翻阅了CSDN、Stackoverflow、Runoob等网站之后,也算是渐渐摸索出来了: 正则表达式re.match("regExp",str):从头开始匹配,返回定位元组; re.search("regExp",str):搜索整个字符串,返回第一个定位元组; re.sub("regExp",repl,str,count):替换count次匹配到的字符为repl(可以为字符串或是基于匹配到的元组的函数); re.compile("regExp").findall(str,startPos,endPos):返回匹配到的元素列表,默认直接group(),如果不group参见返回跌倒器的finditer; re.split("regExp",str,maxsplit):分割; \s:匹配任意空白字符 \S:匹配非空字符 \d:匹配数字字符 \D:匹配非数字字符 \b:匹配单词边界 \B:匹配非单词边界 |:或 .:任意字符 [...]:匹配[]内任意字符 [^...]匹配任意非[]内字符 ^/$:开头/结尾 re+:匹配≥1个表达式 re*:匹配≥0个表达式 re?:匹配0个或1个由re定义的片段 re{n}:匹配n个表达式 re{n,}:匹配≥n个表达式 re{n,m}:匹配n~m次个表达式 ():分组,记住匹配文本 Chromedriverget_attribute(str):获取str标签的内容,可以是src/textContent等,可以通过开发者工具拷贝完整html获知 find_elements():返回一个列表 以上就是所有我新学/复习到的语法,在经过几天更新语法啊、定位方式啊、下拉方式啊、美化代码啊之类的折腾,我终于写出了算是比较完美的爬虫代码: 支持选择是否获取主树洞编号(对于某些远古洞可能存在误判) 支持选择是否保存代称(对于某些引用洞可能会删除代称失效) 支持选择获取收藏夹 操作限制,每条树洞最多获取10条以内的回复,超过十条的你直接复制全文吧(doge完整的爬虫代码参见main/SpiderForPKUHole.py: 再次提醒几点使用须知: 需安装Selenium 4.0.0以上 需装好了Chromedriver 需填好了登陆token 请勿高强度爬取树洞,增添服务器压力 请勿对外扩散此代码 更多问题可联系我的邮箱[email protected] |
CopyRight 2018-2019 实验室设备网 版权所有 |