{"id":5278,"date":"2022-04-02T18:51:20","date_gmt":"2022-04-02T10:51:20","guid":{"rendered":"https:\/\/egonlin.com\/?p=5278"},"modified":"2022-04-02T18:51:20","modified_gmt":"2022-04-02T10:51:20","slug":"09-03-python%e5%bf%85%e5%a4%87%e5%ba%93-%e4%bb%8eweb%e8%a7%a3%e6%9e%90%e5%88%b0%e7%bd%91%e7%bb%9c%e7%a9%ba%e9%97%b4","status":"publish","type":"post","link":"https:\/\/egonlin.com\/?p=5278","title":{"rendered":"09-03 python\u5fc5\u5907\u5e93-\u4eceweb\u89e3\u6790\u5230\u7f51\u7edc\u7a7a\u95f4"},"content":{"rendered":"<h1>\u4e00\u3001\u6982\u8ff0<\/h1>\n<ul>\n<li>Python\u5e93\u4e4b\u7f51\u7edc\u722c\u866b<\/li>\n<li>Python\u5e93\u4e4bWeb\u4fe1\u606f\u63d0\u53d6<\/li>\n<li>Python\u5e93\u4e4bWeb\u7f51\u7ad9\u5f00\u53d1<\/li>\n<li>Python\u5e93\u4e4b\u7f51\u7edc\u5e94\u7528\u5f00\u53d1<\/li>\n<\/ul>\n<h1>\u4e8c\u3001Python\u5e93\u4e4b\u7f51\u7edc\u722c\u866b<\/h1>\n<h2>2.1 Requests<\/h2>\n<p>Requests: \u6700\u53cb\u597d\u7684\u7f51\u7edc\u722c\u866b\u529f\u80fd\u5e93\uff0c<a href=\"http:\/\/www.python-requests.org\/\">http:\/\/www.python-requests.org\/<\/a><\/p>\n<ul>\n<li>\u63d0\u4f9b\u4e86\u7b80\u5355\u6613\u7528\u7684\u7c7bHTTP\u534f\u8bae\u7f51\u7edc\u722c\u866b\u529f\u80fd<\/li>\n<li>\u652f\u6301\u8fde\u63a5\u6c60\u3001SSL\u3001Cookies\u3001HTTP(S)\u4ee3\u7406\u7b49<\/li>\n<li>Python\u6700\u4e3b\u8981\u7684\u9875\u9762\u7ea7\u7f51\u7edc\u722c\u866b\u529f\u80fd\u5e93<\/li>\n<\/ul>\n<pre><code class=\"language-python\">import requests\nr = requests.get(&#039;https:\/\/api.github.com\/user&#039;, auth=(&#039;user&#039;, &#039;pass&#039;))\n\nr.status_code\nr.headers[&#039;content-type&#039;]\nr.encoding\nr.text<\/code><\/pre>\n<h2>2.2 Scrapy<\/h2>\n<p>Scrapy: \u4f18\u79c0\u7684\u7f51\u7edc\u722c\u866b\u6846\u67b6\uff0cPython\u6570\u636e\u5206\u6790\u9ad8\u5c42\u6b21\u5e94\u7528\u5e93\uff0c<a href=\"https:\/\/scrapy.org\/\">https:\/\/scrapy.org<\/a><\/p>\n<ul>\n<li>\u63d0\u4f9b\u4e86\u6784\u5efa\u7f51\u7edc\u722c\u866b\u7cfb\u7edf\u7684\u6846\u67b6\u529f\u80fd\uff0c\u529f\u80fd\u534a\u6210\u54c1<\/li>\n<li>\u652f\u6301\u6279\u91cf\u548c\u5b9a\u65f6\u7f51\u9875\u722c\u53d6\u3001\u63d0\u4f9b\u6570\u636e\u5904\u7406\u6d41\u7a0b\u7b49<\/li>\n<li>Python\u6700\u4e3b\u8981\u4e14\u6700\u4e13\u4e1a\u7684\u7f51\u7edc\u722c\u866b\u6846\u67b6<\/li>\n<\/ul>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/04\/\u4eceweb\u89e3\u6790\u5230\u7f51\u7edc\u7a7a\u95f41.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/04\/\u4eceweb\u89e3\u6790\u5230\u7f51\u7edc\u7a7a\u95f41.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h2>2.3 pyspider<\/h2>\n<p>pyspider: \u5f3a\u5927\u7684Web\u9875\u9762\u722c\u53d6\u7cfb\u7edf\uff0c<a href=\"http:\/\/docs.pyspider.org\/\">http:\/\/docs.pyspider.org<\/a><\/p>\n<ul>\n<li>\u63d0\u4f9b\u4e86\u5b8c\u6574\u7684\u7f51\u9875\u722c\u53d6\u7cfb\u7edf\u6784\u5efa\u529f\u80fd<\/li>\n<li>\u652f\u6301\u6570\u636e\u5e93\u540e\u7aef\u3001\u6d88\u606f\u961f\u5217\u3001\u4f18\u5148\u7ea7\u3001\u5206\u5e03\u5f0f\u67b6\u6784\u7b49<\/li>\n<li>Python\u91cd\u8981\u7684\u7f51\u7edc\u722c\u866b\u7c7b\u7b2c\u4e09\u65b9\u5e93pyspider: \u5f3a\u5927\u7684Web\u9875\u9762\u722c\u53d6\u7cfb\u7edf<\/li>\n<\/ul>\n<h1>\u4e09\u3001Python\u5e93\u4e4bWeb\u4fe1\u606f\u63d0\u53d6<\/h1>\n<h2>3.1 Beautiful Soup<\/h2>\n<p>Beautiful Soup: HTML\u548cXML\u7684\u89e3\u6790\u5e93\uff0c<a href=\"https:\/\/www.crummy.com\/software\/BeautifulSoup\/bs4\">https:\/\/www.crummy.com\/software\/BeautifulSoup\/bs4<\/a><\/p>\n<ul>\n<li>\u63d0\u4f9b\u4e86\u89e3\u6790HTML\u548cXML\u7b49Web\u4fe1\u606f\u7684\u529f\u80fd<\/li>\n<li>\u53c8\u540dbeautifulsoup4\u6216bs4\uff0c\u53ef\u4ee5\u52a0\u8f7d\u591a\u79cd\u89e3\u6790\u5f15\u64ce<\/li>\n<li>\u5e38\u4e0e\u7f51\u7edc\u722c\u866b\u5e93\u642d\u914d\u4f7f\u7528\uff0c\u5982Scrapy\u3001requests\u7b49<\/li>\n<\/ul>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/04\/\u4eceweb\u89e3\u6790\u5230\u7f51\u7edc\u7a7a\u95f42.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/04\/\u4eceweb\u89e3\u6790\u5230\u7f51\u7edc\u7a7a\u95f42.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h2>3.2 Re<\/h2>\n<p>Re: \u6b63\u5219\u8868\u8fbe\u5f0f\u89e3\u6790\u548c\u5904\u7406\u529f\u80fd\u5e93\uff0c<a href=\"https:\/\/docs.python.org\/3.6\/library\/re.html\">https:\/\/docs.python.org\/3.6\/library\/re.html<\/a><\/p>\n<ul>\n<li>\u63d0\u4f9b\u4e86\u5b9a\u4e49\u548c\u89e3\u6790\u6b63\u5219\u8868\u8fbe\u5f0f\u7684\u4e00\u6279\u901a\u7528\u529f\u80fd<\/li>\n<li>\u53ef\u7528\u4e8e\u5404\u7c7b\u573a\u666f\uff0c\u5305\u62ec\u5b9a\u70b9\u7684Web\u4fe1\u606f\u63d0\u53d6<\/li>\n<li>Python\u6700\u4e3b\u8981\u7684\u6807\u51c6\u5e93\u4e4b\u4e00\uff0c\u65e0\u9700\u5b89\u88c5<\/li>\n<\/ul>\n<h2>3.3 Python-Goose<\/h2>\n<p>Python-Goose: \u63d0\u53d6\u6587\u7ae0\u7c7b\u578bWeb\u9875\u9762\u7684\u529f\u80fd\u5e93\uff0c<a href=\"https:\/\/github.com\/grangier\/python-goose\">https:\/\/github.com\/grangier\/python-goose<\/a><\/p>\n<ul>\n<li>\u63d0\u4f9b\u4e86\u5bf9Web\u9875\u9762\u4e2d\u6587\u7ae0\u4fe1\u606f\/\u89c6\u9891\u7b49\u5143\u6570\u636e\u7684\u63d0\u53d6\u529f\u80fd<\/li>\n<li>\u9488\u5bf9\u7279\u5b9a\u7c7b\u578bWeb\u9875\u9762\uff0c\u5e94\u7528\u8986\u76d6\u9762\u8f83\u5e7f<\/li>\n<li>Python\u6700\u4e3b\u8981\u7684Web\u4fe1\u606f\u63d0\u53d6\u5e93<\/li>\n<\/ul>\n<pre><code>from goose import Goose\nurl = &#039;http:\/\/www.elmundo.es\/elmundo\/2012\/10\/28\/espana\/1351388909.html&#039;\ng = Goose({&#039;use_meta_language&#039;: False,&#039;target_language&#039;:&#039;es&#039;}) \narticle = g.extract(url=url)\narticle.cleaned_text[:150]<\/code><\/pre>\n<h1>\u56db\u3001Python\u5e93\u4e4bWeb\u7f51\u7ad9\u5f00\u53d1<\/h1>\n<h2>4.1 Django<\/h2>\n<p>Django: \u6700\u6d41\u884c\u7684Web\u5e94\u7528\u6846\u67b6\uff0c<a href=\"https:\/\/www.djangoproject.com\/\">https:\/\/www.djangoproject.com<\/a><\/p>\n<ul>\n<li>\u63d0\u4f9b\u4e86\u6784\u5efaWeb\u7cfb\u7edf\u7684\u57fa\u672c\u5e94\u7528\u6846\u67b6<\/li>\n<li>MTV\u6a21\u5f0f\uff1a\u6a21\u578b(model)\u3001\u6a21\u677f(Template)\u3001\u89c6\u56fe(Views)<\/li>\n<li>Python\u6700\u91cd\u8981\u7684Web\u5e94\u7528\u6846\u67b6\uff0c\u7565\u5fae\u590d\u6742\u7684\u5e94\u7528\u6846\u67b6<\/li>\n<\/ul>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/04\/\u4eceweb\u89e3\u6790\u5230\u7f51\u7edc\u7a7a\u95f43.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/04\/\u4eceweb\u89e3\u6790\u5230\u7f51\u7edc\u7a7a\u95f43.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h2>4.2 Pyramid<\/h2>\n<p>Pyramid: \u89c4\u6a21\u9002\u4e2d\u7684Web\u5e94\u7528\u6846\u67b6\uff0c<a href=\"https:\/\/trypyramid.com\/\">https:\/\/trypyramid.com\/<\/a><\/p>\n<ul>\n<li>\u63d0\u4f9b\u4e86\u7b80\u5355\u65b9\u4fbf\u6784\u5efaWeb\u7cfb\u7edf\u7684\u5e94\u7528\u6846\u67b6<\/li>\n<li>\u4e0d\u5927\u4e0d\u5c0f\uff0c\u89c4\u6a21\u9002\u4e2d\uff0c\u9002\u5408\u5feb\u901f\u6784\u5efa\u5e76\u9002\u5ea6\u6269\u5c55\u7c7b\u5e94\u7528<\/li>\n<li>Python\u4ea7\u54c1\u7ea7Web\u5e94\u7528\u6846\u67b6\uff0c\u8d77\u6b65\u7b80\u5355\u53ef\u6269\u5c55\u6027\u597d<\/li>\n<\/ul>\n<pre><code class=\"language-python\"># 10\u884c\u5de6\u53f3Hello Word\u7a0b\u5e8f\nfrom wsgiref.simple_server import make_server \nfrom pyramid.config import Configurator\nfrom pyramid.response import Response\n\ndef hello_world(request):\n    return Response(&#039;Hello World&#039;)\n\nif __name__ == &#039;__main__&#039;:\n    with Configurator() as config:\n        config.add_route(&#039;hello&#039;, &#039;\/&#039;)\n    config.add_view(hello_world, route_name=&#039;hello&#039;)\n    app = config.make_wsgi_app()\n    server = make_server(&#039;0.0.0.0&#039;, 6543, app)\n    server.serve_forever()<\/code><\/pre>\n<h2>4.3 Flask<\/h2>\n<p>Flask: Web\u5e94\u7528\u5f00\u53d1\u5fae\u6846\u67b6\uff0c<a href=\"http:\/\/flask.pocoo.org\/\">http:\/\/flask.pocoo.org<\/a><\/p>\n<ul>\n<li>\u63d0\u4f9b\u4e86\u6700\u7b80\u5355\u6784\u5efaWeb\u7cfb\u7edf\u7684\u5e94\u7528\u6846\u67b6<\/li>\n<li>\u7279\u70b9\u662f\uff1a\u7b80\u5355\u3001\u89c4\u6a21\u5c0f\u3001\u5feb\u901f<\/li>\n<li>Django &gt; Pyramid &gt; Flask<\/li>\n<\/ul>\n<pre><code class=\"language-python\">from flask import Flask \n\napp = Flask(__name__) \n\n@app.route(&#039;\/&#039;)\ndef hello_world():\n    return &#039;Hello, World!&#039;<\/code><\/pre>\n<h1>\u4e94\u3001Python\u5e93\u4e4b\u7f51\u7edc\u5e94\u7528\u5f00\u53d1<\/h1>\n<h2>5.1 WeRoBot<\/h2>\n<p>WeRoBot: \u5fae\u4fe1\u516c\u4f17\u53f7\u5f00\u53d1\u6846\u67b6\uff0c<a href=\"https:\/\/github.com\/offu\/WeRoBot\">https:\/\/github.com\/offu\/WeRoBot<\/a><\/p>\n<ul>\n<li>\u63d0\u4f9b\u4e86\u89e3\u6790\u5fae\u4fe1\u670d\u52a1\u5668\u6d88\u606f\u53ca\u53cd\u9988\u6d88\u606f\u7684\u529f\u80fd<\/li>\n<li>\u5efa\u7acb\u5fae\u4fe1\u673a\u5668\u4eba\u7684\u91cd\u8981\u6280\u672f\u624b\u6bb5<\/li>\n<\/ul>\n<pre><code class=\"language-python\"># \u5bf9\u5fae\u4fe1\u6bcf\u4e2a\u6d88\u606f\u53cd\u9988\u4e00\u4e2aHello World\nimport werobot\nrobot = werobot.WeRoBot(token=&#039;tokenhere&#039;)\n\n@robot.handler\ndef hello(message):\n    return &#039;Hello World!&#039;<\/code><\/pre>\n<h2>5.2 aip<\/h2>\n<p>aip: \u767e\u5ea6AI\u5f00\u653e\u5e73\u53f0\u63a5\u53e3\uff0c<a href=\"https:\/\/github.com\/offu\/WeRoBot\">https:\/\/github.com\/offu\/WeRoBot<\/a><\/p>\n<ul>\n<li>\u63d0\u4f9b\u4e86\u8bbf\u95ee\u767e\u5ea6AI\u670d\u52a1\u7684Python\u529f\u80fd\u63a5\u53e3<\/li>\n<li>\u8bed\u97f3\u3001\u4eba\u8138\u3001OCR\u3001NLP\u3001\u77e5\u8bc6\u56fe\u8c31\u3001\u56fe\u50cf\u641c\u7d22\u7b49\u9886\u57df<\/li>\n<li>Python\u767e\u5ea6AI\u5e94\u7528\u7684\u6700\u4e3b\u8981\u65b9\u5f0f<\/li>\n<\/ul>\n<h2>5.3 MyQR<\/h2>\n<p>MyQR: \u4e8c\u7ef4\u7801\u751f\u6210\u7b2c\u4e09\u65b9\u5e93\uff0c<a href=\"https:\/\/github.com\/sylnsfar\/qrcode\">https:\/\/github.com\/sylnsfar\/qrcode<\/a><\/p>\n<ul>\n<li>\u63d0\u4f9b\u4e86\u751f\u6210\u4e8c\u7ef4\u7801\u7684\u7cfb\u5217\u529f\u80fd<\/li>\n<li>\u57fa\u672c\u4e8c\u7ef4\u7801\u3001\u827a\u672f\u4e8c\u7ef4\u7801\u548c\u52a8\u6001\u4e8c\u7ef4\u7801<\/li>\n<\/ul>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/04\/\u4eceweb\u89e3\u6790\u5230\u7f51\u7edc\u7a7a\u95f44.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/04\/\u4eceweb\u89e3\u6790\u5230\u7f51\u7edc\u7a7a\u95f44.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h1>\u516d\u3001\u5355\u5143\u5c0f\u7ed3<\/h1>\n<h2>6.1 \u4eceWeb\u89e3\u6790\u5230\u7f51\u7edc\u7a7a\u95f4<\/h2>\n<ul>\n<li>Requests\u3001Scrapy\u3001pyspider<\/li>\n<li>Beautiful Soup\u3001Re\u3001Python-Goose<\/li>\n<li>Django\u3001Pyramid\u3001Flask<\/li>\n<li>WeRobot\u3001aip\u3001MyQR<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001\u6982\u8ff0 Python\u5e93\u4e4b\u7f51\u7edc\u722c\u866b Python\u5e93\u4e4bWeb\u4fe1\u606f\u63d0\u53d6 Python\u5e93\u4e4bWeb\u7f51\u7ad9\u5f00\u53d1 Pytho [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":5280,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[371,382],"tags":[],"_links":{"self":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/5278"}],"collection":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5278"}],"version-history":[{"count":0,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/5278\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/media\/5280"}],"wp:attachment":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}