Python 网络爬虫 学习笔记.CH1-2 HTML解析

教材:《Web Scraping with Python——Collecting Data from the Modern Web》© 2015 by Ryan Mitchell


网络数据采集是一种通过多种手段收集网络数据的方式,不光是通过与 API 交互(或者直接与浏览器交互)的方式。最常用的方法是写一个自动化程序向网络服务器请求数据(通常是用 HTML 表单或其他网页文件),然后对数据进行解析,提取需要的信息。

实现一个网络爬虫的基本思路: 1)通过网站域名获取 HTML 数据;    2)解析数据;    3)存储所需要的信息;    4) 如有必要,移动到另一个网页重复此过程。


互联网工作原理——当你在浏览器中输入域名按回车后,发生了什么?

你在浏览器输入的域名,通过DNS服务器将URL中的域名解析为IP地址,这样:

Python 网络爬虫 学习笔记.CH1-2 HTML解析_第1张图片

浏览器根据IP地址向web服务器发送HTTP(HyperText Transfer Protocol,超文本传输协议)请求,说“你给我发个网页复本给这个客户”。这个请求,具体怎么传播的,不懂。服务器收到请求后,就同意,给浏览器发了一堆数据包裹(chunks,为什么拆成data chunks进行传输呢?为了无数用户可以在同一时间下载同一网站的数据),浏览器收到后又把包裹裹吧裹吧成一个完整的网页给傻逼客户看。

Python 网络爬虫 学习笔记.CH1-2 HTML解析_第2张图片

python用urlib爬取单个网页的所有信息:

from urllib.request import urlopen

#Retrieve HTML string from the URL

html = urlopen("http://www.pythonscraping.com/exercises/exercise1.html")

print(html.read())

用BeautifulSoup实现同样的功能:

from urllib.request import urlopen

from bs4 import BeautifulSoup

html = urlopen("http://www.pythonscraping.com/pages/page1.html")

bsObj= BeautifulSoup(html.read())

print(bsObj)

要想输出特定的数据,直接.属性就可以了。像,要输出一级标题,直接print(bsObj.h1)

Python 网络爬虫 学习笔记.CH1-2 HTML解析_第3张图片

还可以实现一些复杂一些的功能,像,单独把网页中的特定的自定义标签的信息抽出来,用findAll()/find()

from urllib.request import urlopen

from bs4 import BeautifulSoup

html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")

bsObj = BeautifulSoup(html, "html.parser")

nameList = bsObj.findAll("span", {"class":"green"})

for name in nameList:

print(name.get_text())

BeautifulSoup 文档里两者的定义:

你可能感兴趣的:(Python 网络爬虫 学习笔记.CH1-2 HTML解析)