前言
近期收到了很多平台推荐的问题,其中有一些问题是非常好的,叙述的也很清楚,可以在问题中看出问题的原因和历史,但是不得不说的,就是有些问题提的是真的很差,没有任何描述,全文中仅仅贴了一条报错信息,除此之外别无他物。这种问题是一种低质问题,其中很多都会使回答者无从下手,完全看不懂问问题者的意图,由此促使我写了这篇如何正确的问问题的文章,希望可以帮助一些需要的人呢
一个好问题的几大必备属性
1、需要有一个精准直观的问题标题
标题是一个问题重要的组成部分,应答者第一眼看到的就是问题的标题,如果您的标题不简练明确的话,应答者有极大的概率不会去阅读其它内容。
编辑标题个人建议使用简短的描述性的语句,在标题中一定要可以捕获到你问问题的主题,更重要的是,问题标题必须主旨鲜明,包含核心信息,例如诸如“为什么根据xxx官方文档中的描述使用xxx=xxx配置的不起作用?”这一类问题,对相关事情了解的人,大概率会点进去查看。
2、语言环境陈述
在大多数情况下,回答问题的人都需要知道您使用的语言和平台。需要提供的基本信息一般有:
- 语言名称: 例如 Python
- 语言版本: 3.6.2
- 操作系统: ubuntu or windows 有些模块在某些操作系统上总是会有奇怪的问题
- 与系统对接的任何软件: 数据库类型或者版本,使用的那种IDE
3、问题叙述时要加上你为这个问题做了哪些努力和测试
当您遇到问题或者bug时,不可能什么都不搜也不做测试直接去提问题,当应答者在查看你的问题时,如果通篇没有你做的测试或者搜索过哪些东西提出过哪些假设的话,有很大概率也是不会帮助你解答这个问题的。
问题叙述在描述自己做过哪些事情这里可以按照,我查询过xxx并按照查询的方式做了xxx实验,但得出的结果还是异常。
4、打正确的标签
每个问答网站几乎都会对提的问题与回答过问题的人做一个分类,当有一个新的问题时,会根据分类将问题推给对应的人,所以对问题打标签一定要准确如果不知道打什么样的标签,那么可以使用平台给推荐的标签,大概率推荐的标签是准确可用的。
5、当事情叙述不清楚的话,那么就上用例或者代码吧!
个人极度推崇将不是涉及核心的用例或者测试代码粘贴出来,可以保证错误能复现,代码尽可能少,精炼,仅仅可以复现错误即可,并辅以 当我输入了x 本应该输出y但是没有输出y而是输出了z等描述,会更好的使应答者进行解答和复现问题。
提问题的例子
问题标题
在scrapy框架下,使用selenium控制chrome浏览器爬取数据时,在未关闭ssh链接时可正常爬取,在关闭ssh链接后几分钟不知为什么开始报错?
主体描述
- 系统环境:ubuntu18 服务器
- python解释器版本:python3.6
- 附加软件:chrome浏览器、chromedriver、selenium
环境安装方法
安装方法 整个工作都在服务器上完成 Chrome和相关软件已安装在服务器上
测试代码使用selenium来控制chrome浏览器,正常返回了xxx网站的的数据
问题详细描述
当我使用scrapy2.0.0和selenium3.141.0来控制chrome抓取数据时,在未关闭ssh链接可以正常抓取数据,但是只要我关闭ssh链接,爬虫就会直接报错。
关于爬虫的启动方式和注意事项
爬虫会在后台运行,而不是显示的运行,这意味着关闭ssh链接不会导致爬虫直接中断
因为在同一环境下,在不使用selenium的其它爬虫,没有受到影响,可以正常抓取数据
报错的详细信息为
Traceback (most recent call last):
File "/root/anaconda3/envs/scrapy36/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks
result = g.send(result)
File "/root/anaconda3/envs/scrapy36/lib/python3.6/site-packages/scrapy/core/downloader/middleware.py", line 37, in process_request
response = yield method(request=request, spider=spider)
File "/root/xxx/xxxxxx/xxxxxxxx/xxxxxxx.py", line 247, in process_request
self.browser.get(request.url)
File "/root/anaconda3/envs/scrapy36/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 333, in get
self.execute(Command.GET, {'url': url})
File "/root/anaconda3/envs/scrapy36/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/root/anaconda3/envs/scrapy36/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: chrome not reachable
(Session info: headless chrome=80.0.3987.122)
个人猜测
应该和selenium没有关系,可能和chrome浏览器有关系,在关闭ssh链接后,chrom浏览器自动的关掉了,没有在后台运行,但是这个猜测就目前而言,我不知道如何进行测试,如果您知道测试方法麻烦您帮忙验证一下,另外您有好的办法解决这个问题,请在后面告知,不胜感谢。
结语
一个好的问题,不仅可以帮助到自己,也可以帮助到其它人!是一个双赢的结果!,不过如果诸位对提问题有什么心得的话欢迎在下方留言
本文暂时没有评论,来添加一个吧(●'◡'●)