【抓取入门】用Python获取站点上的表数据
很高兴见到你。
系统解决方案部门太可爱了,对卡比探索上瘾了!
虽然天气已经很热了,但已经是春天了。即使在上班的路上,我也经常看到人们穿着像新员工(超越遗忘)。
这次我要写一篇关于Python抓取的文章,对新员工的工作(可能)有点用处。
什么是刮痧?
数据分析近年来备受关注,抓取也是一项基础技术,主要是从网站获取所需数据的方法。
“刮”字原本有“刮起”的意思,似乎就是由此而来。
在本文中,我们将使用编程语言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 Common 和 Office Online”
https://docs.microsoft.com/ja-jp/microsoft-365/enterprise/urls-and-ip-address-ranges?view= o365-全球
运行环境及完整代码
使用的操作系统:Microsoft Windows 10 Pro
Python版本:3.10
从 bs4 导入 BeautifulSoup 从 html.parser 导入 HTMLParser 从 urllib.request 导入 csv 导入 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.解析器") table = bsObj.findAll("table")[4] rows = table.findAll("tr") with open(r"C:\Users\python\Desktop\python\2022\microsoft.csv", " w",encoding="cp932", newline="") 作为文件:writer = csv.writer(file) 对于行中的行:csvRow = [] 对于 row.findAll(["td", "th"] 中的单元格): csvRow.append(cell.get_text()) writer.writerow(csvRow)
代码解释
从 bs4 导入 BeautifulSoup 从 html.parser 导入 HTMLParser 导入 csv 从 urllib.request 导入 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读取。
表 = bsObj.findAll("table")[4] 行 = table.findAll("tr")
→ 指定 [4] 作为此 HTML 结构中的第四个表(使用每个浏览器的 Web 开发人员工具)。另外,使用 findAll 查找“tr”标签。
打开(r“C:\ Users \ python \ Desktop \ python \ 2022 \ microsoft.csv”,“w”,encoding =“cp932”,newline =“”)作为文件:writer = csv.writer(文件)行中的行: csvRow = [] for row.findAll(["td", "th"]) 中的单元格: csvRow.append(cell.get_text()) writer.writerow(csvRow)
→ 以任意路径和文件名指定字符代码等(如果文件不存在,则在指定路径中创建)。
可以用“w”写入,并用“newline="”获得的信息每列换行写入。
在上列指定的行(tr标签)中搜索td和th,循环获取该列的值并将其写入csv文件。
输出结果
这就是发生的事情。这次我们只会使用几条信息,但是您获得的信息越多,效率就会越高。
如果再有一次机会,我想写一篇对某人有用的文章。再见