【抓取入门】用Python获取站点上的表数据

您好,很高兴见到您。
我是系统解决方案部门的河合,最近我特别迷上了 Kirby Discovery。
天气已经很热了,但春天真的来了!我上班路上(很久以前)就看到有人穿着像新员工一样的衣服了。
这次,我会写一篇关于Python网页抓取的文章,或许对新员工的工作有所帮助。

什么是刮削?
近年来,数据分析日益受到关注,而网络爬虫是其基本技术之一,主要用于从网站获取目标数据。“
scrape”一词最初的意思是“收集”,该术语似乎由此而来。
在本文中,我们将使用编程语言 Python 自动检索页面中的表格信息。

准备
如果未安装 Python,从
下载并安装适用于您操作系统的软件包 https://www.python.org/downloads/
安装我们这次要使用的库“ BeautifulSoup4 ”和“ html.parser
本文假设您在 Windows 环境下操作,因此请按 [CTRL] + [R] 打开命令提示符,输入 [cmd],然后执行以下命令。安装程序将开始运行。
使用 pip 安装 bs4 html.parser
这次,我想尝试从以下 Microsoft 页面自动获取 Office 365 中使用的域名和 IP 地址等信息,然后将其写入 CSV 文件(手动获取这些信息非常麻烦)。
“Office 365 URL 和 IP 地址范围” > “Microsoft 365 通用和 Office Online”
https://docs.microsoft.com/ja-jp/microsoft-365/enterprise/urls-and-ip-address-ranges?view=o365-worldwide
运行环境及完整代码
使用的操作系统:Microsoft Windows 10 Pro
Python版本:3.10
from bs4 import BeautifulSoup from html.parser import HTMLParser import csv from urllib.request import urlopen headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"} html = urlopen("https://docs.microsoft.com/ja-jp/microsoft-365/enterprise/urls-and-ip-address-ranges?view=o365-worldwide") bsObj = BeautifulSoup(html, "html.parser") table = bsObj.findAll("table")[4] rows = table.findAll("tr") with open(r"C:\Users\python\Desktop\python\2022\microsoft.csv", "w", encoding="cp932", newline="") as file: writer = csv.writer(file) for row in rows: csvRow = [] for cell in row.findAll(["td", "th"]): csvRow.append(cell.get_text()) writer.writerow(csvRow)
代码解释
from bs4 import BeautifulSoup from html.parser import HTMLParser import csv from urllib.request import urlopen
导入各个库。
headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"} html = urlopen("https://docs.microsoft.com/ja-jp/microsoft-365/enterprise/urls-and-ip-address-ranges?view=o365-worldwide") bsObj = BeautifulSoup(html, "html.parser")
→ 添加用户代理信息(本例中我们将使用 Firefox)。
指定要使用 urlopen 打开的页面,并在此处声明,以便 BeautifulSoup 可以读取它。
table = bsObj.findAll("table")[4] rows = table.findAll("tr")
→ 根据 HTML 结构(使用各浏览器的开发者工具),将 [4] 指定为第四个表格。此外,使用 findAll 函数查找“tr”标签。

with open(r"C:\Users\python\Desktop\python\2022\microsoft.csv", "w", encoding="cp932", newline="") as file: writer = csv.writer(file) for row in rows: csvRow = [] for cell in row.findAll(["td", "th"]): csvRow.append(cell.get_text()) writer.writerow(csvRow)
→ 指定字符代码等,以及所需的路径和文件名(如果文件不存在,则会在指定的路径中创建该文件)。
您可以使用“w”写入数据,并使用“newline=""”将检索到的信息写入文件,即每列另起一行。
在上述列指定的行(tr 标签)中搜索 td 和 th,使用循环获取这些列的值,并将它们写入 CSV 文件。
输出结果
这就是我得到的结果。这次我只得到了一些信息,但信息越多,效率就越高。
如果我还有机会,我想写一篇对别人有用的文章。

8