您的位置:首页 > 理论基础 > 计算机网络

Python网络数据采集1:初见网络爬虫

2017-12-26 14:59 691 查看

前言

所有代码示例:https://github.com/REMitchell/python-scraping

网络数据采集程序:有时称为网络机器人(bots),是一种通过多种手段收集网络数据的方式,不光是通过与API交互的方式。最常用的方法是写一个自动化程序向网络服务器请求数据(通常是用HTML表单或其他网页文件),然后对数据进行解析,提取需要的信息。涉及非常广泛的编程技术和手段,比如数据分析、信息安全等。

为什么要做网络数据采集:可以完成传统搜索引擎不能做的事情。设计较好的网络爬虫可以通过采集大量的网站数据,做出飞往波士顿航班价格随时间变化的图表,告诉你买机票的最佳时间。显然,大量的应用场景都会需要这种几乎可以毫无阻碍地获取数据的手段:市场预测、机器语言翻译,甚至医疗诊断,通过对新闻网站、文章以及健康论坛中的数据进行采集和分析,也可以获得很多好处。

创建爬虫

    思考“网络爬虫”时通常的想法:

通过网站域名获取HTML数据
根据目标信息解析数据
存储目标信息
如果有必要,移动到另一个网页重复这个过程

第一章 初见网络爬虫

    网络上如果没有HTML文本格式层、CSS样式层、JavaScript执行层和图像渲染层,咋看起来会有点儿吓人,浏览器为我们做了这些。接下来我们将不通过浏览器的帮助来格式化和理解数据。

1.1、网络连接

from urllib.request import urlopen
html = urlopen("http://pythonscraping.com/pages/page1.html")
print(html.read())python3 scrapetest.py
它只能读取单个HTML文件

urllib 是 Python 的标准库

1.2、BeautifulSoup简介

它通过定位HTML标签来格式化和组织复杂的网络信息,用简单易用的Python对象为我们展现XML结构信息。
安装:sudo apt-get install python-bs4
from bs4 import BeautifulSoup

运行BeautifulSoup
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://pythonscraping.com/pages/page1.html")
bsObj = BeautifulSoup(html.read()) #BeautifulSoup对象
print(bsObj.h1) #bsObj.html.body.h1 / bsObj.body.h1 / bsObj.html.h1<h1>An Interesting Title</h1>
可靠的网络连接:网页在服务器上不存在,服务器不存在等时

from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSoup
def getTitle(url):
try:
html = urlopen(url)
except HTTPError as e: #确保url成功
return None

try:
bsObj = BeautifulSoup(html.read())
title = bsObj.body.h1
except AttributeError as e: #确保正确读到html中的标签
return None
return title
title = getTitle("http://pythonscraping.com/pages/page1.html")
if title == None:
print("Title could not be found")
else:
print(title)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: