代码之家  ›  专栏  ›  技术社区  ›  Federico A. Ramponi

如何从脚本中搜索堆栈溢出问题?

  •  3
  • Federico A. Ramponi  · 技术社区  · 18 年前

    给定一组关键字,例如“Python最佳实践”,我想获得包含这些关键字的前10个堆栈溢出问题,按相关性(?)排序,比如从Python脚本中。我的目标是得到一个元组列表(标题、URL)。

    5 回复  |  直到 12 年前
        1
  •  6
  •   itsadok    18 年前
    >>> from urllib import urlencode
    >>> params = urlencode({'q': 'python best practices', 'sort': 'relevance'})
    >>> params
    'q=python+best+practices&sort=relevance'
    >>> from urllib2 import urlopen
    >>> html = urlopen("http://stackoverflow.com/search?%s" % params).read()
    >>> import re
    >>> links = re.findall(r'<h3><a href="([^"]*)" class="answer-title">([^<]*)</a></h3>', html)
    >>> links
    [('/questions/5119/what-are-the-best-rss-feeds-for-programmersdevelopers#5150', 'What are the best RSS feeds for programmers/developers?'), ('/questions/3088/best-ways-to-teach-a-beginner-to-program#13185', 'Best ways to teach a beginner to program?'), ('/questions/13678/textual-versus-graphical-programming-languages#13886', 'Textual versus Graphical Programming Languages'), ('/questions/58968/what-defines-pythonian-or-pythonic#59877', 'What defines &#8220;pythonian&#8221; or &#8220;pythonic&#8221;?'), ('/questions/592/cxoracle-how-do-i-access-oracle-from-python#62392', 'cx_Oracle - How do I access Oracle from Python? '), ('/questions/7170/recommendation-for-straight-forward-python-frameworks#83608', 'Recommendation for straight-forward python frameworks'), ('/questions/100732/why-is-if-not-someobj-better-than-if-someobj-none-in-python#100903', 'Why is if not someobj: better than if someobj == None: in Python?'), ('/questions/132734/presentations-on-switching-from-perl-to-python#134006', 'Presentations on switching from Perl to Python'), ('/questions/136977/after-c-python-or-java#138442', 'After C++ - Python or Java?')]
    >>> from urlparse import urljoin
    >>> links = [(urljoin('http://stackoverflow.com/', url), title) for url,title in links]
    >>> links
    [('http://stackoverflow.com/questions/5119/what-are-the-best-rss-feeds-for-programmersdevelopers#5150', 'What are the best RSS feeds for programmers/developers?'), ('http://stackoverflow.com/questions/3088/best-ways-to-teach-a-beginner-to-program#13185', 'Best ways to teach a beginner to program?'), ('http://stackoverflow.com/questions/13678/textual-versus-graphical-programming-languages#13886', 'Textual versus Graphical Programming Languages'), ('http://stackoverflow.com/questions/58968/what-defines-pythonian-or-pythonic#59877', 'What defines &#8220;pythonian&#8221; or &#8220;pythonic&#8221;?'), ('http://stackoverflow.com/questions/592/cxoracle-how-do-i-access-oracle-from-python#62392', 'cx_Oracle - How do I access Oracle from Python? '), ('http://stackoverflow.com/questions/7170/recommendation-for-straight-forward-python-frameworks#83608', 'Recommendation for straight-forward python frameworks'), ('http://stackoverflow.com/questions/100732/why-is-if-not-someobj-better-than-if-someobj-none-in-python#100903', 'Why is if not someobj: better than if someobj == None: in Python?'), ('http://stackoverflow.com/questions/132734/presentations-on-switching-from-perl-to-python#134006', 'Presentations on switching from Perl to Python'), ('http://stackoverflow.com/questions/136977/after-c-python-or-java#138442', 'After C++ - Python or Java?')]
    

    将其转换为函数应该很简单。

    编辑

    def get_stackoverflow(query):
        import urllib, urllib2, re, urlparse
        params = urllib.urlencode({'q': query, 'sort': 'relevance'})
        html = urllib2.urlopen("http://stackoverflow.com/search?%s" % params).read()
        links = re.findall(r'<h3><a href="([^"]*)" class="answer-title">([^<]*)</a></h3>', html)
        links = [(urlparse.urljoin('http://stackoverflow.com/', url), title) for url,title in links]
    
        return links
    
        2
  •  5
  •   Community Mohan Dere    9 年前

    由于Stackoverflow已经有了这个功能,您只需要获取搜索结果页面的内容,并获取所需的信息。以下是按相关性进行搜索的URL:

    https://stackoverflow.com/search?q=python+best+practices&sort=relevance

    <h3><a href="/questions/5119/what-are-the-best-rss-feeds-for-programmersdevelopers#5150" class="answer-title">What are the best RSS feeds for programmers/developers?</a></h3>
    

    因此,您应该能够通过对该表单的字符串进行正则表达式搜索来获得前十个。

        3
  •  2
  •   mhawke    18 年前

    建议在SO中添加RESTAPI。 http://stackoverflow.uservoice.com/

        4
  •  1
  •   Xenph Yan    18 年前

    您可以从有效的HTTP请求中截取返回的HTML。但这将导致坏的业力,并失去享受一夜安眠的能力。

        5
  •  0
  •   pookleblinky    18 年前

    推荐文章