大数据与云计算学习 Python网络数据采集 urllib

本文将介绍网络数据采集的基本原理:

  • 如何用Python从网络服务器请求信息
  • 如何对服务器的响应进行基本处理
  • 如何以自动化手段与网站进行交互
  • 如何创建具有域名切换、信息收集以及信息存储功能的爬虫

urllib

这里我们先操练起来,写个测试爬虫

1
2
3
stylus复制代码from urllib.request import urlopen//查找python的urllib库的request模块,导出urlopen函数
html = urlopen("http://jxdxsw.com/")//urlopen用来打开并读取一个从网络获取的远程对象
print(html.read())

然后,把这段代码保存为`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
2
3
vim复制代码sudo apt-get install python-bs4
sudo apt-get install python3-pip //安装python包管理工具
pip3 install beautifulsoup4

使用BeautifulSoup解析这段代码,能够得到一个 BeautifulSoup 的对象,并能按照标准的缩进格式的结构输出:

1
2
3
4
5
6
7
8
9
10
11
stylus复制代码from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://jxdxsw.com/")
bsobj = BeautifulSoup(html.read())
print(bsobj.prettify())

print("-----------------------------我是分割线---------------------------")
print(bsobj.title)

print("-----------------------------我是分割线---------------------------")
print(bsobj.find_all('a'))

异常处理

1
abnf复制代码html = urlopen("http://jxdxsw.com/")

这行代码主要可能会发生两种异常:

  • 网页在服务器上不存在(或者获取页面的时候出现错误)
  • 服务器不存在

第一种异常会返回HTTP错误,如:”404 Page Not Found” “500 Internal Server Error”,所有类似情况, urlopen函数都会抛出“HTTPError”异常,遇到这种异常,我们可以这样处理:

1
2
3
4
5
6
7
8
python复制代码try:
html = urlopen("http://jxdxsw.com/")
except HTTPError as e:
print(e)
# 返回空值,中断程序,或者执行另一个方案
else:
# 程序继续。注意,如果你已经在上面异常捕获那段代码里返回或中断(break)
  #那就不需要使用else语句,这段代码也不会执行

第二种服务器不存在(就是说链接jxdxsw.com/打不开,或者url写错),urlopen 会返回一个None对象,这个对象与其他编程语言中的null类似

1
2
3
4
5
vim复制代码# 添加一个判断语句检测返回的html是不是None
if html is None:
print("URL is not found)
else:
#程序继续

参考

Python网络数据采集

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%