前言

所有代码示例: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)

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐