سؤال

بالنظر إلى سلسلة من الكلمات الرئيسية، مثل "أفضل ممارسات بايثون"، أود الحصول على أول 10 أسئلة في Stack Overflow تحتوي على تلك الكلمات الرئيسية، مرتبة حسب الصلة (؟)، على سبيل المثال من برنامج نصي بايثون.هدفي هو أن أحصل في نهاية المطاف على قائمة من الصفوف (العنوان، عنوان URL).

كيف يمكنني تحقيق ذلك؟هل تفكر في الاستعلام عن Google بدلاً من ذلك؟(كيف يمكنك أن تفعل ذلك من بايثون؟)

هل كانت مفيدة؟

المحلول

>>> 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

نصائح أخرى

نظرًا لأن 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>

لذلك يجب أن تكون قادرًا على الحصول على العشرة الأولى عن طريق إجراء بحث عادي عن سلسلة من هذا النموذج.

وتشير إلى أن تضاف إلى API REST إلى SO. http://stackoverflow.uservoice.com/

هل يمكن فحص كشط HTML عاد من طلب HTTP صالح. ولكن هذا من شأنه أن يؤدي في الكرمة سيئة، وفقدان القدرة على الاستمتاع ليلة نوم جيدة.

وأود أن مجرد استخدام Pycurl لسلسلة مصطلحات البحث على اوري الاستعلام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top