python网页数据抓取(soup()如何依靠类标签找到数据的位置?)
优采云 发布时间: 2022-03-05 20:03python网页数据抓取(soup()如何依靠类标签找到数据的位置?)
.
同样,如果您将光标放在名称“S&P”上并单击,您可以看到此信息收录在选项卡和控制台中。
现在我们知道如何依靠类标签来找到我们需要的数据。
学习编码
现在我们知道所需的数据在哪里,我们可以开始编写代码来构建我们的网络爬虫。立即打开您的文本编辑工具!
首先,我们必须导入我们将要使用的各种库。
# 导入各种库
导入 urllib2
从 bs4 导入 BeautifulSoup
然后,我们定义一个变量(quote_page)并为其分配网站的URL链接。
# 分配 网站 链接
quote_page = ':IND'
接下来,使用Python的urllib2库获取刚刚定义的URLquote_page的HTML页面信息。
# 检索 网站 并获取 html 代码并将其存储在变量“page”中
page = urllib2.urlopen(quote_page)
最后,我们将网页解析成 BeautifulSoup 格式,这样我们就可以使用 BeautifulSoup 库来解析网页了。
# 用 beautifulSoup 解析 HTML 代码并将其存储在变量“soup”中`
汤= BeautifulSoup(页面,'html.parser')
现在我们有了收录整个网页的 HTML 代码的变量汤。我们开始从汤中提取信息。
不要忘记我们的数据存储在唯一的层中。BeautifulSoup 库中的 find() 函数可以帮助我们提取不同层次的内容。我们需要的 HTML 类“名称”在整个页面中是唯一的,因此我们可以简单地查找它
# 获取“名称”类
代码段并提取对应值
name_box = soup.find('h1', attrs={'class': 'name'})
我们拿到标签后,就可以使用name_box的text属性来获取对应的值了
name = name_box.text.strip() # strip() 函数用于去除前导和尾随空格
打印名称
使用类似的方法,我们可以得到股票指数的价格数据。
# 获取股指价格数据
price_box = soup.find('div', attrs={'class':'price'})
价格 = price_box.text
打印价格
运行程序时,您应该会看到程序输出当前标准普尔 500 指数的价格。
以 Excel CSV 格式导出数据
现在我们已经学会了如何获取数据,是时候学习如何存储数据了。Excel 逗号分隔数据格式 (CSV) 是一个不错的选择。这使我们能够在 Excel 中打开数据文件以进行查看和进一步处理。
在此之前,我们需要导入 Python 的 csv 模块和 datetime 模块。Datetime 模块用于获取数据记录时间。请将以下代码行插入您的导入代码部分。
导入 csv
从日期时间导入日期时间
在代码的最底部,添加将数据写入 CSV 文件的代码。
# 以“add”方式打开一个csv文件,保证文件的原创信息不被覆盖
使用 open('index.csv', 'a') 作为 csv_file:
writer = csv.writer(csv_file)
writer.writerow([名称,价格,datetime.now()])
现在,如果您运行该程序,您应该能够导出 index.csv 文件。您可以在Excel中打开文件,看到有一行数据,如图所示。
所以如果你每天运行这个程序,你可以很容易地得到标准普尔的价格,而不必像以前那样在 网站 上翻找。
更进一步(高级用法)
多个股票指数
抓住一个股票指数对你来说还不够,对吧?我们可以尝试同时提取多个股票指数信息。首先,我们需要修改 quote_page 以将其定义为 URL 数组。
quote_page = [':IND', ':IND']
然后我们把代码中的数据提取部分改成了for循环。这个循环可以一个一个地处理 URL,并将变量 data 中的所有数据存储为一个元组。
# for 循环
数据 = []
对于quote_page中的pg:
# 检索 网站 并返回 HTML 代码,存储在变量 'page' 中
page = urllib2.urlopen(pg)
# 使用 beautifulSoup 解析 HTML 代码并存储在变量 `soup` 中
汤= BeautifulSoup(页面,'html.parser')
# 获取“名称”类
代码段并提取对应值
name_box = soup.find('h1', attrs={'class': 'name'})
name = name_box.text.strip() # strip() 用于去除开头和结尾
# 获取股指价格数据
price_box = soup.find('div', attrs={'class':'price'})
价格 = price_box.text
# 以元组类型存储数据
data.append((名称,价格))
并且,修改save部分,逐行保存数据
# 以“add”方式打开一个csv文件,保证文件的原创信息不被覆盖
使用 open('index.csv', 'a') 作为 csv_file:
writer = csv.writer(csv_file)
# for 循环
对于名称,数据中的价格:
writer.writerow([名称,价格,datetime.now()])
再次运行程序,应该可以同时提取两个股指的价格信息了!
先进的抓取技术
BeautifulSoup 库使用简单,可以很好地完成少量的 网站 抓取。但是如果你对大量抓取的信息感兴趣,你可以考虑其他方法:
1. Scrapy,一个强大的 Python 数据抓取框架。
2. 您可以尝试将一些常见的应用程序编程接口 (API) 集成到您的代码中。这种获取数据的方法比网络抓取要高效得多。例如,您可以尝试 Facebook Graph API,该 API 可帮助您获取 Facebook 网站 上不可见的隐藏信息。
3. 如果数据量太大,可以考虑使用 MySQL 之类的数据库后端来存储数据。
采取“不重复”的方法
DRY 是“不要重复你所做的事情”的缩写。您可以尝试像链接中的这个人一样自动化您的日常工作。您还可以考虑其他有趣的项目,例如跟踪您的 Facebook 朋友何时在线(当然是在他们同意的情况下),或者在论坛中获取讲座主题列表以尝试自然语言处理(这是当前的热门话题在人工智能中)!