如何使用 Python 和 BeautifulSoup 爬取网站!

news/2024/5/10 13:43:36/文章来源:https://blog.csdn.net/PythonJavaPHP/article/details/103181151

互联网上的信息如此之多,任何人穷其一生也无法全部消化吸收。你需要的不是访问这些信息,而是一种可伸缩的方式,可以用来收集、组织和分析这些信息。你需要的是 Web 爬取。Web 爬取可以自动提取数据,并以一种让你可以轻松理解的格式显示出来。Web 爬取可以用于许多场景,但本教程将重点介绍它在金融市场中的应用。

互联网上的信息如此之多,任何人穷其一生也无法全部消化吸收。你需要的不是访问这些信息,而是一种可伸缩的方式,可以用来收集、组织和分析这些信息。

你需要的是 Web 爬取。

Web 爬取可以自动提取数据,并以一种让你可以轻松理解的格式显示出来。Web 爬取可以用于许多场景,但本教程将重点介绍它在金融市场中的应用。

如果你是一名狂热的投资者,每天获取收盘价可能是一件比较痛苦的事情,尤其是当你需要的信息需要查看多个网页才能找到的时候。我们将通过构建一个网络爬取器,从互联网上自动检索股票指数,简化数据提取。

准   备

我们将使用 Python 作为爬取语言,并使用一个简单而强大的库 BeautifulSoup。

  • 对于 Mac 用户而言,OS X 预装了 Python。打开终端,输入 python --version。你应该可以看到 Python 的版本是 2.7.x。

  • 对于 Windows 用户,请通过官方网站安装 Python。

接下来,我们需要使用 pip(一个 Python 包管理工具)获取 BeautifulSoup 库。

在终端输入:

  •  
  •  
easy_install pip  pip install BeautifulSoup4

注意:如果你运行上述命令失败,试下在每一行前面加上 sudo。

基本概念

在一头扎进代码之前,让我们先了解下 HTML 的基本概念和一些爬取规则。

HTML 标签

如果你已经了解了 HTML 标签,大可以跳过这部分。

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
<!DOCTYPE html><html>    <head>    </head>    <body>        <h1> First Scraping </h1>        <p> Hello World </p>    <body></html>

这是 HTML 页面的基本语法。每个服务于网页里的一个块:

  1. <!DOCTYPE html>:HTML 文档必须以类型声明开始。

  2. HTML 文档包含在<html>和</htlm>之间。

  3. HTML 文档的 meta 和 script 声明位于<head>和</head>之间。

  4. HTML 的可视部分位于<body>和<body>标签之间。

  5. 标题的定义通过标签 <h1> 到 <h6> 。

  6. 段落使用 <p> 标签定义。

其他有用的标签还有超链接标签<a>、表格标签<table>、表格行标签<tr>、表格列标签<td>。

此外,HTML 标签有时带有 id 或 class 属性。id 属性为 HTML 标签指定一个惟一的 id,并且该值在 HTML 文档中必须是惟一的。class 属性用于为具有相同 class 的 HTML 标签定义相同的样式。我们可以使用这些 id 和 class 帮助定位我们想要的数据。

要了解关于 HTML 标签、 id 和 class 的信息,请查阅 W3Schools 教程。

爬取规则

  1. 你应该在爬取之前检查网站的条款和限制。请仔细阅读关于合法使用数据的声明。通常,你收集的数据不应用于商业目的。

  2. 用你的程序从网站请求数据时不要过激(也称为滥发),因为这可能会对网站造成破坏。确保你的程序以一种合理的方式运行(即表现得像个人)。每秒请求一个页面是很好的做法。

  3. 网站的布局可能会不时发生变化,所以一定要重新访问网站,并根据需要重写代码。

查看页面

作为例子,让我们看一个来自 Bloomberg Quote 网站的页面。

作为关注股票市场的人,我们希望从这个页面上获取指数名称(标准普尔 500)及其价格。首先,右键单击并打开浏览器检查器来查看网页。

尝试把鼠标悬停在价格上,你应该可以看到一个蓝框。单击它,就可以在浏览器控制台中选择相关的 HTML。

从中我们可以看到,价格位于多层 HTML 标签之中,即<div class="basic-quote"> → <div class="price-container up"> → <div class="price">。

类似地,如果你将鼠标悬停并单击名称“S&P 500 Index”,就会看到它位于<div class="basic-quote">和<h1 class="name">中。

现在,我们已经借助 class 标签知道了数据的唯一位置。

进入代码

现在,我们已经知道我们想要的数据在哪,我们可以开始编写 Web 爬取器了。现在,打开编辑器。

首先,我们需要导入我们将要用到的库。

  •  
  •  
  •  
# 导入库import urllib2from bs4 import BeautifulSoup

接下来,声明一个保存页面 URL 的变量。

  •  
  •  
# 指定 URLquote_page = ‘http://www.bloomberg.com/quote/SPX:IND'

然后,使用 Python urllib2 获取上述 URL 指向的 HTML 页面。

  •  
  •  
# 查询网站,将 HTML 返回给变量“page”page = urllib2.urlopen(quote_page)

最后,将页面解析成 BeautifulSoup 的格式,这样我们就可以使用 BeautifulSoup 处理它了。

  •  
  •  
# 取得 class 为 name 的 <div> 并获取它的值name_box = soup.find(‘h1’, attrs={‘class’: ‘name’})

现在,我们有一个包含页面 HTML 的变量 soup。从这里开始我们可以编写提取数据的代码了。

还记得我们需要的数据所独有的标签层次吗?BeautifulSoup 可以帮助我们进入这些层,并使用 find() 提取内容。在本例中,由于 HTML class 属性的名称在这个页面上是惟一的,所以我们可以简单地查询<div class="name">。

  •  
  •  
# 取得 class 为 name 的 <div> 并获取它的值name_box = soup.find(‘h1’, attrs={‘class’: ‘name’})

在找到标签之后,我们就可以通过获取其 text 属性来获取数据。

  •  
  •  
name = name_box.text.strip() # strip() 用于移除字符串头尾的字符print name

类似地,我们也可以获取指数价格。

  •  
  •  
  •  
  •  
# 获取指数价格price_box = soup.find(‘div’, attrs={‘class’:’price’})price = price_box.textprint price

运行程序,你应该可以看到它给出了标准普尔 500 指数的价格。

导出到 Excel CSV

现在我们要保存获取到的数据了。Excel 逗号分隔格式是一个不错的选择。它可以在 Excel 中打开,这样你就可以看到数据并轻松地处理它。

但是首先,我们必须导入 Python csv 模块和 datetime 模块来获取记录日期。将以下代码插入导入部分。

  •  
  •  
import csvfrom datetime import datetime

在代码底部添加将数据写入 CSV 文件的代码。

  •  
  •  
  •  
  •  
# 用追加方式打开一个 CSV 文件,这样原有的数据就不会被擦除with open(‘index.csv’, ‘a’) as csv_file: writer = csv.writer(csv_file) writer.writerow([name, price, datetime.now()])

现在运行程序,你应该就可以导出到 index.csv 文件,然后你就可以用 Excel 打开,其中应该包含如下这行数据。

这样,你每天运行下这个程序就可以轻松获得标准普尔 500 指数的价格了,就不用在网站上翻来翻去了。

进一步探究(高级用法)

多指数

对你而言,爬取一个指数并不够用,对吗?我们可以尝试下同时提取多个指数。

首先,将 quote_page 改成 URL 数组。

  •  
quote_page = [‘http://www.bloomberg.com/quote/SPX:IND', ‘http://www.bloomberg.com/quote/CCMP:IND']

然后,将数据提取代码放入一个 for 循环,它会逐个处理数组中的 URL 并将所有数据以元组的形式保存到变量 data 中。

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 用于循环data = []for pg in quote_page:
# 查询网站,将 HTML 返回给变量“page”page = urllib2.urlopen(pg)
# 使用 BeautifulSoup 解析 HTML 页面,并将其保存在变量“soup”中soup = BeautifulSoup(page, ‘html.parser’)
# 取得 class 为 name 的 <div> 并获取它的值name_box = soup.find(‘h1’, attrs={‘class’: ‘name’})name = name_box.text.strip() # strip() 用于移除字符串头尾的字符
# 获取指数价格price_box = soup.find(‘div’, attrs={‘class’:’price’})price = price_box.text
# 将数据以元组的形式保存data.append((name, price))

修改数据保存部分,逐行保存数据,

  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 用追加方式打开一个 CSV 文件,这样原有的数据就不会被擦除with open(‘index.csv’, ‘a’) as csv_file:writer = csv.writer(csv_file)
# for 循环for name, price in data:writer.writerow([name, price, datetime.now()])

运行这个程序,应该就可以同时提取两个指数了。

高级爬取技术

BeautifulSoup 非常简单,适合于小规模 Web 爬取。但是,如果你对更大规模的数据爬取感兴趣,就应该考虑下下面这些选项:

  1. Scrapy 是一个非常强大的 Python 爬取框架。

  2. 尝试在你的代码中集成一些公共 API。数据检索的效率会远远高于爬取网页。例如,看看 Facebook Graph API ,它可以帮助你获得 Facebook 网页上没有显示的隐藏数据。

  3. 当数据变大时,考虑使用类似 MySQL 这样的数据库后端来存储数据。

采用 DRY 方法

DRY 的意思是“不要重复你自己”,试着像这个人一样自动化你的日常任务。还可以考虑其他一些有趣的项目,比如跟踪 Facebook 上朋友的活动时间(当然要征得他们的同意),或者在论坛上列出一些话题,并尝试自然语言处理(这是目前人工智能的热门话题)!如果有任何问题,请在下面留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_855238.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

江南鹤微信hook c#版已实现webhook,在你的网站中也可以调用hook了

可以将hook软件放在服务器上。在客户端电脑上用web调用即可。 特色&#xff1a; 1 每次登录只显示二维码&#xff0c;不再显示上次登录的用户 2 设置好不自动更新后&#xff0c;会保存。下次用户登录&#xff0c;程序也不会自动更新。 交流vx&#xff1a;weixinhook 第一步…

Python Flask 搭建个人网站

介绍Hello Kuko 是使用PythonFlask这样的组合搭建的网站&#xff0c;虽然其中的功能根本没有。项目已开源到github&#xff1a;kukoapp.pyimport io import json import os import randomfrom flask import Flask from flask import url_for from flask import request from fl…

CentOS 简便方法新手搭建一个网站

该文章写给从来没有搭建过网站的小伙伴们的&#xff0c;大佬们就不要浪费时间看下去了。 只搭建nginx&#xff0c;不搭建后端、数据库等相关服务&#xff0c;目的是让小伙伴能在刚刚学习完Html、css、js之后能够更直观的访问到自己的网页。 如何快速的搭建一个网站呢&#xf…

docnet 开发需要知道的网站!()

当前全球有数百万的开发人员在使用微软的.NET 技术。如果你是其中之一&#xff0c;或者想要成为其中之一的话&#xff0c;我下面将要列出的每一个站点都应该是你的最爱&#xff0c;都应该收藏到书签中去。 对于不熟悉.NET技术的朋友&#xff0c;需要说明一下&#xff0c;.NET…

vs2010发布网站

发布网站步骤&#xff1a; 1、新建网站&#xff1a; 打开IIS&#xff0c;右击网站——>添加网站 填写网站名称&#xff08;随便写&#xff09;和应用程序池名称 物理路径选择你要存放发布网站的位置&#xff08;最好自己新建一个空的文件夹&#xff09; 点击身份验证下的链…

chrome 打开csdn网站显示有问题

换一个浏览器就不会 这是为啥

详解微软网站三剑客之Graphic Designer

Adobe合并Macromedia后&#xff0c;就不断传来微软开发图形图像和动画软件的消息。不过信息少的可怜&#xff0c;特别是号称Flash杀手的“Sparkle”&#xff0c;除了一条简短的新闻就没别的了。所谓厚积薄发&#xff0c;没想到微软这次一出手就是三款设计软件&#xff0c;看来是…

Ubuntu 12.04下搭建Web网站服务器 (MySQL+PHP+Apache环境)教程

Ubuntu 12.04下搭建Web网站服务器 &#xff08;MySQLPHPApache环境&#xff09;教程 作者&#xff1a;木瓜 发布&#xff1a;2012-04-28 22:06 分类&#xff1a;网络 阅读&#xff1a;1832次 10条评论 分享到&#xff1a;QQ空间新浪微博腾讯微博人人网更多10前言 看了…

在网站上添加百度搜索

我们自己开发的个人网站有时需要将百度搜索加上&#xff0c;怎么加呢&#xff1f; 其实很简单&#xff0c;将如下代码加到自己需要的网页上即可&#xff1a; 当然有技术的朋友可以到hao123上参考&#xff0c;将hao123上的百度搜索条拿来自己用。 <form data-hook"sear…

demo4 表格隔行变色效果 onmouseout onmouseover

let trs document.querySelector(tbody).querySelectorAll(tr)for(let i0;i<trs.length;i){// 鼠标经过事件trs[i].onmouseover function(){this.className bg}// 鼠标离开事件trs[i].onmouseout function(){this.className }}

大学四年,靠着这些学习网站,我从挂科学渣变成了别人眼中的大神

原文链接&#xff1a; https://blog.csdn.net/JAck_chen0309/article/details/104780288 前记 毕业合影时&#xff0c;导员笑着对我说“你可是我们系里的风云人物”。我也笑了&#xff0c;思绪却回到了四年前。 还记得四年前&#xff0c;我从小县城里走出&#xff0c;来到学校…

docker-compose 配置 nginx + node + mysql 网站环境

本文需要熟悉 Docker、Node、Nginx 的基础知识&#xff0c;如果不熟悉的同学需要查看文档了解学习后阅读。 Docker - 从入门到实践Node.js v10.15.3 文档Nginx 入门指南 这里开始正文 准备测试代码 初始化一个项目目录&#xff0c;并配置基础的测试代码 简单的一些代码下面不…

为你的网站配置一个小巧的框架( CodeIgniter)

现在的web开发确实已经到了无框架卜欢乐的状态&#xff0c;无论是前端&#xff1a;JavaScript&#xff08;vue.js\react.js\angular.js框架和jQuery库&#xff09;&#xff0c;CSS&#xff08;bootstrap&#xff09;&#xff0c;还是后端&#xff1a;PHP&#xff08;CI/thinkPH…

使用postman测试需要登陆认证网站的api

postman作为一款web开发中必备的神器&#xff0c;有很多只是需要我们去学习 如果想要使用postman测试需要登陆认证网站的api&#xff0c;只需开启一个按钮&#xff1a; 然后在头部添加cookie以及X-CSRFToken&#xff08;因为项目是django&#xff09;

用户点击与网站目标 - 基于Google Analytics的应用

转载出处: http://webdataanalysis.net/tool-for-web-analytics/click-and-goal/ 用户在网站的行为其实无非就是输入和点击&#xff0c;而点击又是最常见的行为&#xff0c;其实用户行为分析一大部分就是在分析用户各种各样的点击行为。我们可以通过各种途径来监控用户点击行为…

三招教你提升团购网站流量转化率(上)

转载出处: http://hi.baidu.com/%CE%A4%B2%AE%C4%C9%CB%B9/blog/item/21f173c3275b82c7d10060a0.html/cmtid/8501cf90d0feb311d21b70ea 本人负责经营美心计化妆品团购网站&#xff0c;日常推广需要对流量进行分析。而流量分析中的核心是分析流量的价值&#xff0c;流量的价值是…

学习Web 开发技术的16个国外最佳教程网站和博客

转载地址: http://www.w3cfuns.com/article-788-1.html 互联网经过这么多年的发展&#xff0c;已经出现了众多的 Web 开发技术&#xff0c;像 .Net/Java/PHP/Python/Ruby 等等。对于 Web 开发人员来说&#xff0c;不管是初学者还是有一定经验的开发人员都需要时刻学习新的开发…

触摸屏网站开发系列(一)-ios web App应用程序(ios meta)

转载地址: http://www.iptu.net/index.php/archives/2955.iptu 触摸屏网站的开发其实现在来讲比前几年移动端网站开发好多了&#xff0c;触摸屏设备IOS、Android、BBOS6等系统自带浏览器均为WEBKIT核心&#xff0c;这就说明PC上面尚未立行的HTML5 CSS3能够运用在这里&#xff…

css横幅_CSS3:创建网站横幅

css横幅Inspired by Tamsin Baker’s beautiful Photoshop brushes “Urban Scrawl” 1 and 2, I was trying to create some shadowed banners using some CSS3 properties. Visit Tamsin’s site and check out all her inspiring artwork including the free Photoshop brus…

谷歌nexus9刷机_Google Nexus网站菜单

谷歌nexus9刷机View demo 查看演示Download Source 下载源Today I want to show you how to reconstruct the sidebar menu of the Google Nexus 7 page. It slides out with a really nice effect where some subitems get expanded as well. When hovering over a special me…