<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==" 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==" 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, 'w', encoding='utf-8') as f:
f.write(fileContent)
#定义一个下载url网页并保存的方法
def DownLoadHtml(url):
#构造请求头
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Connection':'keep-alive',
'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3'
}
#模拟浏览器发送请求
response = requests.get(url,headers = headers)
if response.status_code == 200:#返回码为200表示正常返回
htmltxt = response.text #网页正文
print(htmltxt)
return htmltxt
else:
return None
if __name__ == "__main__":
url = "https://mp.weixin.qq.com/s/tK6jYTTtl8jQI86fysvj4g"
htmlstr = DownLoadHtml(url)
savepath="c:/vWeChatFiles/test.html" #先手动在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==" title="点击并拖拽以移动" width="15"></span>
</div>
<p><br>运行上面代码之前,请先手动在C盘下新建vWeChatFiles文件夹,本项目之后下载的所有文件都放在此目录下,请注意这里是保存下载的网页文件的,而你的python源代码可以放在其他目 |
|