python抓取网页数据(soup()如何依靠类标签找到数据的位置?)
优采云 发布时间: 2021-11-27 00:26python抓取网页数据(soup()如何依靠类标签找到数据的位置?)
.
同样,如果将光标放在名称“标准普尔指数”上并单击,则可以看到控制台中的此信息收录在标签中。
现在我们知道如何依靠类标签来查找我们需要的数据了。
学习代码 现在我们知道了我们需要的数据的位置,我们可以开始编写代码来构建我们的网络爬虫。现在请打开您的文本编辑工具!
首先,我们必须导入我们想要使用的各种库。
# 导入各种库
导入 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(page,'html.parser')
现在我们有了收录整个网页的 HTML 代码的变量汤。我们开始从汤中提取信息。
不要忘记我们的数据存储在一个独特的层次结构中。BeautifulSoup 库中的 find() 函数可以帮助我们进入不同的层次来提取内容。我们需要的 HTML 类型“名称”在整个网页中是唯一的,所以我们可以简单地找到
# 获取“名称”类别
代码段并提取对应值
name_box = soup.find('h1', attrs={'class':'name'})
拿到label后,我们可以使用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 文件的代码。
#以“添加”方式打开一个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'中
页 = urllib2.urlopen(pg)
# 使用beautifulSoup解析HTML代码并将其存储在变量`soup`中
汤 = BeautifulSoup(page,'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
# 使用元组类型存储数据
数据.附加((名称,价格))
并且,修改保存部分,逐行保存数据
#以“添加”方式打开一个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 好友的在线时间(当然他们同意),或者在论坛中获取演讲主题列表来尝试自然语言处理(这是当前人工智能的热门话题)!
原文链接: