本文将介绍网络数据采集的基本原理:
- 如何用Python从网络服务器请求信息
- 如何对服务器的响应进行基本处理
- 如何以自动化手段与网站进行交互
- 如何创建具有域名切换、信息收集以及信息存储功能的爬虫
urllib
这里我们先操练起来,写个测试爬虫
1 | stylus复制代码from urllib.request import urlopen//查找python的urllib库的request模块,导出urlopen函数 |
然后,把这段代码保存为`scrapetest.py`,终端中运行如下命令
1 | vim复制代码python3 scrapetest.py |
这里会输出http://jxdxsw/
这个网页首页的全部HTML代码
鲸鱼注
:
Python 3.x中urllib分为子模块:
- urllib.request
- urllib.parse
- urllib.error
- urllib.robotparser
urllib是python的标准库,它能够:
- 从网络请求数据
- 处理cookie
- 改变 请求头和用户代理 等元数据的函数
更多查看python官方文档
BeatifulSoup
beatifulsoup非python标准库需要单独安装
安装使用详情
鲸鱼使用的是ubuntu所以一下几行命令即可
1 | vim复制代码sudo apt-get install python-bs4 |
使用BeautifulSoup解析这段代码,能够得到一个 BeautifulSoup 的对象,并能按照标准的缩进格式的结构输出:
1 | stylus复制代码from urllib.request import urlopen |
异常处理
1 | abnf复制代码html = urlopen("http://jxdxsw.com/") |
这行代码主要可能会发生两种异常:
- 网页在服务器上不存在(或者获取页面的时候出现错误)
- 服务器不存在
第一种异常会返回HTTP错误,如:”404 Page Not Found” “500 Internal Server Error”,所有类似情况, urlopen函数都会抛出“HTTPError”异常,遇到这种异常,我们可以这样处理:
1 | python复制代码try: |
第二种服务器不存在(就是说链接jxdxsw.com/打不开,或者url写错),urlopen 会返回一个None对象,这个对象与其他编程语言中的null类似
1 | vim复制代码# 添加一个判断语句检测返回的html是不是None |
参考
本文转载自: 掘金