一步步教你打造微信公众号文章爬虫(2)-下载网页

论坛 期权论坛     
选择匿名的用户   2021-5-30 01:40   400   0
<div class="blogpost-body" id="cnblogs_post_body">
<p> </p>
<p><span class="cke_widget_wrapper cke_widget_inline cke_widget_image cke_image_nocaption cke_widget_selected"><img alt="一步步教你打造微信公众号文章爬虫(2)-下载网页" class="has cke_widget_element" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-77dfb6b7bf30b7072b1f4ee6e88b6727"><span class="cke_reset cke_widget_drag_handler_container"><img alt="" class="cke_reset cke_widget_drag_handler" height="15" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw&#61;&#61;" title="点击并拖拽以移动" width="15"><span class="cke_image_resizer" title="点击并拖拽以改变尺寸"></span></span></span></p>
<h1> </h1>
<p>书接上文,今天一起来学习把网页版文章下载到本地电脑上。<br><br>前面讲过,请求网页的流程是浏览器先向服务器请求html,服务器返回html,浏览器分析这个html,发现html中还需要一堆的js,css,图片,然后浏览器再去下载这些文件,最终组装成一个完整的html页面。<br><br><br>所以,第一步,要把这个html下载下来。<br><br>是时候请出大家期待已久的python了,我在讲解的过程中只列出核心代码,完整代码会列在文章最后,所以强烈建议先把整篇文章看完了再动手自己敲代码。其他文章也是相同的逻辑,以后不再重复。<br><br>需要用到一个鼎鼎大名的第三方库 requests ,用它来模拟浏览器给微信服务器发送请求和接收请求。<br><br>那么发送的请求中都要包含什么内容呢?<br><br>上文介绍chrome开发者工具时提过这个问题,奥秘在Headers这个标签中,见下图,理论上来讲chrome浏览器发送了什么我们的最好就原样照着用python发送什么,即把下图所示的General 和 Request Headers 块中的参数全都发送出去。但多数时候并不需要这样,特别是对于get请求,一般只需要少数几个参数即可,但是请注意User-Agent这一项一定要改得跟chrome一样。其他细节不再多述,过后您操作的多了自然会明白。</p>
<p> </p>
<p><span class="cke_widget_wrapper cke_widget_inline cke_widget_image cke_image_nocaption cke_widget_selected"><img alt="" class="has cke_widget_element" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-55e9097b1f997c03e32fc5e7d92a56c9"><span class="cke_reset cke_widget_drag_handler_container"><img alt="" class="cke_reset cke_widget_drag_handler" height="15" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw&#61;&#61;" title="点击并拖拽以移动" width="15"><span class="cke_image_resizer" title="点击并拖拽以改变尺寸"></span></span></span></p>
<p>简单的注释会直接在代码中列出,复杂的会在代码后面用文字再解释,另外本文是一份原稿发布在多个平台,可能有的平台显示代码会有缩进错乱的问题,当你发现运行代码出错时请秉持“尽信书不如无书”的批判态度。</p>
<p> </p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_wrapper_has cke_widget_selected">
  <pre class="has cke_widget_element"><code class="hljs">#下面这一行一定别忘了
import requests
#定义一个保存文件的函数
def SaveFile(fpath,fileContent):
    with open(fpath, &#39;w&#39;, encoding&#61;&#39;utf-8&#39;) as f:
            f.write(fileContent)
#定义一个下载url网页并保存的方法
def DownLoadHtml(url):
    #构造请求头   
    headers &#61; {
                 &#39;User-Agent&#39;:&#39;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36&#39;,
                 &#39;Accept&#39;:&#39;text/html,application/xhtml&#43;xml,application/xml;q&#61;0.9,*/*;q&#61;0.8&#39;,
                 &#39;Connection&#39;:&#39;keep-alive&#39;,
                 &#39;Accept-Language&#39;:&#39;zh-CN,zh;q&#61;0.8,en-US;q&#61;0.5,en;q&#61;0.3&#39;
              }     
#模拟浏览器发送请求     
    response &#61; requests.get(url,headers &#61; headers)   
    if response.status_code &#61;&#61; 200:#返回码为200表示正常返回
        htmltxt &#61; response.text #网页正文
        print(htmltxt)        
        return htmltxt     
    else:        
        return None
   
   
if __name__ &#61;&#61; &#34;__main__&#34;:
    url &#61; &#34;https://mp.weixin.qq.com/s/tK6jYTTtl8jQI86fysvj4g&#34;
    htmlstr &#61; DownLoadHtml(url)
    savepath&#61;&#34;c:/vWeChatFiles/test.html&#34; #先手动在C盘下新建vWeChatFiles文件夹
    SaveFile(savepath,htmlstr)</code></pre>
  <span class="cke_reset cke_widget_drag_handler_container"><img alt="" class="cke_reset cke_widget_drag_handler" height="15" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw&#61;&#61;" title="点击并拖拽以移动" width="15"></span>
</div>
<p><br>运行上面代码之前,请先手动在C盘下新建vWeChatFiles文件夹,本项目之后下载的所有文件都放在此目录下,请注意这里是保存下载的网页文件的,而你的python源代码可以放在其他目
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP