看论坛有人推荐这个 python 自动化开发工具,觉得有点好玩,尝试一下。
最近在关注 stackoverflow 上的某一类问题, 所以想用程序帮我做监控,自动打开浏览器,搜索指定关键词,然后把前 30 个问题列表保存或者发给我。 源代码贡献到这个github了,以下是我的开发过程.
安装 clicknium vscode 扩展和 python module ,参照getting started.
tab = cc.edge.open("www.stackoverflow.com")
tab.find_element(locator.stackoverflow.text_q).set_text(word)
tab.find_element(locator.stackoverflow.text_q).send_hotkey('{ENTER}')
elem = tab.wait_appear(locator.stackoverflow.human_verification_div, wait_timeout=5)
if elem != None:
elem.click()
点击'Newest',根据时间来排序
利用 clicknium 的获取相似元素,获取每个问题的标题,vote 数量,内容,最后更新时间,以及问题的 url
while catch_count < 30:
sleep(1)
elems_title = tab.find_elements(locator.stackoverflow.a_title)
elems_vote = tab.find_elements(locator.stackoverflow.span_vote)
elems_content = tab.find_elements(locator.stackoverflow.div_content)
elems_time = tab.find_elements(locator.stackoverflow.span_time)
for i in range(len(elems_title)):
url = "https://www.stackoverflow.com" + elems_title[i].get_property('href')
item = {
'Keyword':word,
'Title': elems_title[i].get_text(),
'Content': elems_content[i].get_text(),
'Time': elems_time[i].get_text(),
'Vote': elems_vote[i].get_text(),
'Url':url}
print(item)
catch_count += 1
if tab.is_existing(locator.stackoverflow.a_next):
tab.find_element(locator.stackoverflow.a_next).click()
else:
break
以下是问题标题链接的 locator
点击'Validate'是可以验证能匹配到单页 15 个元素的, 通过find_elements1
可以一次性获取到所有的元素列表,然后通过get_text()
获取文本,针对链接,还可以通过get_property('href')
来获取属性 href 。
1
masker 2022-09-03 21:52:40 +08:00 via Android 6
然后用 Google translate 翻译一下,做成内容农场?
|
2
automation2022 OP @masker 主要是自己使用, 节省自己时间, 之前还做过一个自动把订阅的专栏文章转成 pdf 推送到 kindle 上来阅读,也有点意思。
|
3
BeautifulSoap 2022-09-03 22:39:45 +08:00 via Android 8
嗯。。。。。。这项目拿来练手可以,但问题在于对 stackoverflow 来说这么费劲真的没有必要
因为 stackoverflow 每三个月定期提供全站的数据备份下载。如果要新数据还提供 api 给你来用,根本没有这么大费周章搞爬虫的必要 https://api.stackexchange.com/docs |
4
ClericPy 2022-09-03 23:14:45 +08:00
clicknium
之前扫了眼 Github 没看到源码... 这个开源么, 不开源不太敢用, 倒是把比较常见的东西都综合到一块了 |
5
wxf666 2022-09-03 23:18:41 +08:00 1
|
6
automation2022 OP @BeautifulSoap 嗯,练练手,评估一下是否好用,将来有其他项目上的需求可以多个选择。
感谢回复,能用 API 解决的肯定是比页面操作要稳定和快速的, 实际自动化项目上经常会遇到中间卡壳环节,没有 API 可用的情况。 |
7
0o0O0o0O0o 2022-09-03 23:24:10 +08:00 via iPhone
而且它也提供 rss https://meta.stackoverflow.com/a/381154
|
10
automation2022 OP @ClericPy 邮件问了,官方回复是在 roadmap 里面,包括跨平台,预计会在未来的几个月里面做
|