爬虫的第一步需要将网页下载下来,下面介绍下载网页内容的方法。

download函数

import urllib.request ## Python2与Python3的区别def download(url):req = urllib.request.Request(url)response = urllib.request.urlopen(req)return response.read()url = "http://example.webscraping.com/"
html = download(url)print(html)

这样运行的结果是直接输出一大堆

我是直接使用Python3自带的IDLE写的程序,输出结果的时候经常卡死,所以可以选择将爬取下来的内容写入文件中,这样速度会快很多。

## 将结果写入到文件的改进版本,适用于英文网站
import urllib.requestdef download(url):req = urllib.request.Request(url)response = urllib.request.urlopen(req)return response.read().decode("utf-8")url = "http://example.webscraping.com/"
html = download(url)html = str(html)
## 将一大堆乱七八糟的代码转换为比较美观的格式
html = html.replace("\xa0", " ")
html = html.replace("\xa9", " ")
html.encode("gbk")file_name = 'f:/Python/用Python写网络爬虫/练习/crawling_file.txt'
file_open = open(file_name, "a")
file_open.write(html)
file_open.close()

这样执行之后会出现一个crawling_file.txt文件


捕获异常

当下载网页时可能会出现一些无法控制的错误,下面给出一个更加健硕的版本。

import urllib.requestdef download(url):try:req = urllib.request.Request(url)response = urllib.request.urlopen(req)html = response.read().decode("utf-8")except urllib.request.URLError as e:print("Download error:", e.reason) ## 输出错误原因html = Nonereturn htmlurl = "http://httpstat.us/500"
html = download(url)html = str(html)
html = html.replace("\xa0", " ")
html = html.replace("\xa9", " ")
html.encode("gbk")file_name = 'f:/Python/用Python写网络爬虫/练习/crawling_try.txt'
file_open = open(file_name, "w+")
file_open.write(html)
file_open.close()

程序中url执行的结果是

此时,可以尝试以下方式解决。

重试下载

不是所有的错误都适合重试下载,4 xx 错误发生在请求存在问题时,
而5xx 错误则发生在服务端存在问题时。所以, 我们只需要确保download函数在发生Sxx 错误时重试下载即可。

import urllib.requestdef download(url, num_retries = 2):try:req = urllib.request.Request(url)response = urllib.request.urlopen(req)html = response.read().decode("utf-8")except urllib.request.URLError as e:print("Download error:", e.reason)html = Noneif num_retries > 0:if hasattr(e, 'code') and 500 <= e.code < 600:return download(url, num_retries-1) ## 递归调用return htmlurl = "http://httpstat.us/500"
html = download(url)html = str(html) ## 写入文件必须要求是str类型## 保证不是乱码切格式是美观的
html = html.replace("\xa0", " ")
html = html.replace("\xa9", " ")
html.encode("gbk")## 文件的标准写法
file_name = 'f:/Python/用Python写网络爬虫/练习/crawling_try_again.txt' ## 在这里只写入文件一次,因为重试下载是发生在有问题的时候,一旦恢复正常就不会再重试下载
file_open = open(file_name, "a")
file_open.write(html)
file_open.close()

Python3 爬虫 1 - 下载网页相关推荐

  1. Python3爬虫-01-简单网页爬取

    ''' 宇宙黑客王磊磊 Python3爬虫 简单网页的获取第一个简单的示例 爬去Hades 官网首页 '''import sys import urllib.request print(sys.get ...

  2. python爬取酷狗音乐json数据为空_【Python3爬虫】下载酷狗音乐上的歌曲

    经过测试,可以下载要付费下载的歌曲(n_n) 准备工作:python3.5+pycharm 使用到的库:requests,re,json 步骤: 打开酷狗音乐的官网,输入想要搜索的歌曲(例如<天 ...

  3. 爬虫python下载网站所有图片_Python爬虫之下载网页图片

    传统的方式是在想要的图片上鼠标点击右键另存为,或者用截图的方式保存图片,其实我们还可以通过使用简单的Python语言实现图片的下载并保存到本地,下面让我们看看如何实现吧 一.确定图片的URL地址及获取 ...

  4. 【Python3爬虫】下载酷狗音乐上的歌曲

    经过测试,可以下载要付费下载的歌曲(n_n) 准备工作:Python3.5+Pycharm 使用到的库:requests,re,json,time,fakeuseragent 步骤: 打开酷狗音乐的官 ...

  5. python爬虫获取的网页数据为什么要加[0-python3爬虫爬取网页思路及常见问题(原创)...

    学习爬虫有一段时间了,对遇到的一些问题进行一下总结. 爬虫流程可大致分为:请求网页(request),获取响应(response),解析(parse),保存(save). 下面分别说下这几个过程中可以 ...

  6. Python3.x爬虫下载网页图片

    Python3.x爬虫下载网页图片 一.选取网址进行爬虫 本次我们选取pixabay图片网站 url=https://pixabay.com/ 二.选择图片右键选择查看元素来寻找图片链接的规则 通过查 ...

  7. python3.4.4实现网页爬虫基础之网页下载器三种方法

    这是是慕课网<Python开发简单爬虫>中网页下载器的三种实现方法,课程用的是python2.7,这里用最新的3.4.4实现出来,分享给新人: import urllib.request ...

  8. python3 爬虫五大模块之三:网页下载器

    Python的爬虫框架主要可以分为以下五个部分: 爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义: URL管理器:负责URL的管理,包括 ...

  9. python3多线程第三方库_Python之多线程爬虫抓取网页图片的示例代码

    目标 嗯,我们知道搜索或浏览网站时会有很多精美.漂亮的图片. 我们下载的时候,得鼠标一个个下载,而且还翻页. 那么,有没有一种方法,可以使用非人工方式自动识别并下载图片.美美哒. 那么请使用pytho ...

最新文章

  1. PHP7.3中fileinfo怎么安装与开启
  2. 第六周项目一-分数类的雏形(2)
  3. Spring-AOP @AspectJ切点函数之target()和this()
  4. 三分钟了解Mysql的表级锁——《深究Mysql锁》
  5. 处理字符串_11_判断一个字符是否是数字
  6. Mobaxterm常用的指令(基于linux)
  7. 软件工程中交流的思考
  8. 一个很有深度的C++内存问题---GDB调试(一)
  9. 排序:插入排序与希尔排序
  10. Laravel测试驱动开发--功能测试
  11. mysql存储过程 等于_mysql存储过程字符串等于
  12. mysql官网下载下来的免安装版怎么配置_Windows下的免安装版MySQL配置
  13. Eclipse添加git插件上传项目到github
  14. 【分治】动态点分治 ([ZJOI2007]捉迷藏)
  15. 昔日最有前途的 Java 最终还是败给了晚辈 Python
  16. imu 里程计融合_MSCKF那些事(十一)算法改进4:融合直接观测
  17. OpenGL编程指南 代码
  18. JDK和JRE的下载与安装
  19. 回归系数t检验公式_最全物理公式合集,高考这一份就够了!
  20. 无线路由器通过有线扩展信号覆盖范围(非桥接方式),实现无缝漫游

热门文章

  1. git忽略文件不生效问题解决
  2. java通过jacob实现文本转语音修改语音库为男声
  3. UR3机器人与EFG-20电动夹爪的连接
  4. 2018 存储技术热点与趋势总结
  5. 记录狗血的这周末 我心态炸了
  6. 智能佳舞蹈变形机器人闪耀昆博会
  7. 极客学院JSP教程笔记(2)
  8. 服务器如何实现电脑无线桥接,无线路由器WDS桥接成功副路由器下电脑无法上网怎么办【解决方法】...
  9. 记坑:mqtt+微信小程序。
  10. python:基于itchat实现查找清理僵尸粉