十分钟能学会的简单python爬虫

简单爬虫三步走,So easy~

本文介绍一个使用python实现爬虫的超简单方法,精通爬虫挺难,但学会实现一个能满足简单需求的爬虫,只需10分钟,往下读吧~

该方法不能用于带有反爬机制的页面,但对于我这样的非专业爬虫使用者,几乎遇到的各种简单爬虫需求都是可以搞定的。

归纳起来,只有简单的3步

  • 使用开发人员工具分析网页HTML
  • 请求网页
  • 获取相应信息

我们以一个简单的需求为例:
从wiki百科标普500指数页面中,利用爬虫自动获取 S&P 500指数所对应的所有股票。如图所示:
SP500


第一步:使用开发人员工具分析网页HTML

首先我们要对待爬取的网页人工的进行结构分析
这里我使用的是Google浏览器
进入页面后,按下F12,打开开发人员工具
这里写图片描述
选择开发人员工具左上角的小箭头
这是一个映射工具
通过它你可以轻松的观察网页中每一个渲染后的元素所对应于网页HTML中的位置
这能够帮我们很轻松的完成html的结构分析,从而快速实现一个爬虫
就像这样
table
通过观察,我们发现,所有待爬取的股票信息都位于一个表格中
这个表格对应于一个<table class="wikitable sortable jquery-tablesorter"> 标签
这里写图片描述
而表格中每一行的的股票信息又对应了table 下的一个tr 标签
因此我们爬虫的工作就是get到table 下的所有tr 标签,并解析出相应内容
第一步网页HTML分析,完成!


第二步:请求网页

下面开始进入代码阶段
这里我使用的是Python3
需要用到requestsBeautifulSoup 这两个库
因此别忘记引用:

import bs4
import requests

首先我们需要请求网页:

response = requests.get("http://en.wikipedia.org/wiki/List_of_S%26P_500_companies")

随后使用BeautifulSoup解析

soup = bs4.BeautifulSoup(response.text,"html5lib")

没有错,就是这么简单~


第三步:获取相应信息

结合第一步的分析
我们爬虫的工作就是get到table 下的所有tr 标签,并解析出相应内容
通过BeautifulSoup库的一个核心的方法select 我们便能完成这个工作
首先获取所有的tr 标签

symbolslist = soup.select('table')[0].select('tr')[1:]

然后获取tr 标签中所需的属性并打印出来

symbols = []
for i, symbol in enumerate(symbolslist):tds = symbol.select('td')symbols.append((tds[0].select('a')[0].text,  # Tickertds[1].select('a')[0].text,  # Nametds[3].text,                 # Sector))

大功告成,最终的程序运行结果如下:
stock

全部代码如下:

import bs4
import requestsif __name__ == "__main__":"""Download and parse the Wikipedia list of S&P500 constituents using requests and BeautifulSoup.Returns a list of tuples for to add to MySQL."""# Use requests and BeautifulSoup to download the# list of S&P500 companies and obtain the symbol tableresponse = requests.get("http://en.wikipedia.org/wiki/List_of_S%26P_500_companies")soup = bs4.BeautifulSoup(response.text,"html5lib")# This selects the first table, using CSS Selector syntax# and then ignores the header row ([1:])symbolslist = soup.select('table')[0].select('tr')[1:]# Obtain the symbol information for each# row in the S&P500 constituent tablesymbols = []for i, symbol in enumerate(symbolslist):tds = symbol.select('td')symbols.append((tds[0].select('a')[0].text,  # Tickertds[1].select('a')[0].text,  # Nametds[3].text,                 # Sector))# show the symbolsshowNum =10for i in range(showNum):print(symbols[i])

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

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

相关文章

PID控制器开发笔记之二:积分分离PID控制器的实现

前面的文章中&#xff0c;我们已经讲述了PID控制器的实现&#xff0c;包括位置型PID控制器和增量型PID控制器。但这个实现只是最基本的实现&#xff0c;并没有考虑任何的干扰情况。在本节及后续的一些章节&#xff0c;我们就来讨论一下经典PID控制器的优化与改进。这一节我们首…

利用python实现短信和电话提醒功能

有时候&#xff0c;我们需要程序帮我们自动检测某些事件的发生 这个需求是广泛存在的 因此&#xff0c;这里整理了利用python实现短信和电话提醒功能的方法 主要需要完成以下4个步骤&#xff1a; - 安装核心库&#xff1a;twilio - 注册账号及配置 - 发送短信示例 - 电话…

PID控制器开发笔记之三:抗积分饱和PID控制器的实现

积分作用的引入是为了消除系统的静差&#xff0c;提高控制精度。但是如果一个系统总是存在统一个方向的偏差&#xff0c;就可能无限累加而进而饱和&#xff0c;极大影响系统性能。抗积分饱和就是用以解决这一问题的方法之一。这一节我们就来实现抗积分饱和的PID算法。 1、抗积…

如何获取STM32 MCU的唯一ID

前段时间由于应用需要对产品授权进行限制&#xff0c;所以研究了一下有关STM32 MCU的唯一ID的资料&#xff0c;并最终利用它实现了我们的目标。 1、基本描述 在STM32的全系列MCU中均有一个96位的唯一设备标识符。在ST的相关资料中&#xff0c;对其功能的描述有3各方面&#x…

SHA256算法原理详解

1. SHA256简介 SHA256是SHA-2下细分出的一种算法 SHA-2&#xff0c;名称来自于安全散列算法2&#xff08;英语&#xff1a;Secure Hash Algorithm 2&#xff09;的缩写&#xff0c;一种密码散列函数算法标准&#xff0c;由美国国家安全局研发&#xff0c;属于SHA算法之一&…

学习笔记:区块链概念入门

本文是100天区块链学习计划的第二篇学习笔记&#xff0c;其实就是按照阮一峰的网络日志-区块链入门教程的讲解进行的简单梳理。也是时间有点紧张的原因&#xff0c;相比于上一篇SHA256算法原理详解&#xff0c;个人感觉质量和原创程度明显下降。待对区块链有了更深的理解后&…

PID控制器开发笔记之四:梯形积分PID控制器的实现

从微积分的基本原理看&#xff0c;积分的实现是在无限细分的情况下进行的矩形加和计算。但是在离散状态下&#xff0c;时间间隔已经足够大&#xff0c;矩形积分在某些时候显得精度要低了一些&#xff0c;于是梯形积分被提出来以提升积分精度。 1、梯形积分基本思路 在PID控制…

SHA256 的C语言实现

前几天总结了SHA256的算法原理一文 SHA2系列的原理并不复杂&#xff0c;但是需要注意细节还是挺多的。不少中文博客贴出的代码都有错&#xff0c;这两天也踩了几个坑。 代码在这里&#xff01;&#xff01;&#xff01;SHA256的C Code 代码实现主要依照的这个git仓库crypto-…

信息摘要算法之一:MD5算法分析及实现

MD5即Message-DigestAlgorithm 5&#xff08;信息-摘要算法5&#xff09;&#xff0c;用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一&#xff08;又译摘要算法、哈希算法&#xff09;&#xff0c;主流编程语言普遍已有MD5实现。 1、MD5算法简介 MD5在90年代初由…

非对称加密概述

非对称加密概述 前言 在阅读《精通比特币》的过程中&#xff0c;我发现比特币系统中有两个重要的概念需要利用非对称加密技术&#xff1a; 比特币地址的生成 交易合法性的验证 因此&#xff0c;我用了几天时间学习了密码学基础知识&#xff0c;尤其是非对称加密技术的原理…

信息摘要算法之二:SHA1算法分析及实现

SHA算法&#xff0c;即安全散列算法&#xff08;Secure Hash Algorithm&#xff09;是一种与MD5同源的数据加密算法&#xff0c;该算法经过加密专家多年来的发展和改进已日益完善&#xff0c;现在已成为公认的最安全的散列算法之一&#xff0c;并被广泛使用。 1、概述 SHA算法…

2018数学建模A题的简单指导

之前写过一篇博客&#xff0c;介绍如何使用差分格式求解热传导方程 今天打开博客&#xff0c;突然发现评论区被这篇文章霸屏了 询问实验室的小伙伴才知&#xff0c;原来是被可爱的建模学子们攻占了 经过简单的了解&#xff0c;发现今年建模的A题的核心就是求解一个热传导方程…

PID控制器开发笔记之五:变积分PID控制器的实现

在普通的PID控制算法中&#xff0c;由于积分系数Ki是常数&#xff0c;所以在整个控制过程中&#xff0c;积分增量是不变的。然而&#xff0c;系统对于积分项的要求是&#xff0c;系统偏差大时&#xff0c;积分作用应该减弱甚至是全无&#xff0c;而在偏差小时&#xff0c;则应该…

使用SIFT匹配金馆长表情包

python使用opencv计算SIFT特征点的示例前言潜在的问题记录demo1&#xff1a;计算并绘制特征点demo2&#xff1a;使用SIFT匹配两幅图像参考文章地址前言 SIFT&#xff08;Scale-invariant feature transform&#xff09;是2004年提出的&#xff0c;至今已经经受住各种考验&…

PID控制器开发笔记之六:不完全微分PID控制器的实现

从PID控制的基本原理我们知道&#xff0c;微分信号的引入可改善系统的动态特性&#xff0c;但也存在一个问题&#xff0c;那就是容易引进高频干扰&#xff0c;在偏差扰动突变时尤其显出微分项的不足。为了解决这个问题人们引入低通滤波方式来解决这一问题。 1、不完全微分的基…

使用Python实现简易的数据标注工具

使用Python实现简易的数据标注工具 以增加工作效率为目的&#xff0c;最近一直在着手构建一个AI ToolBox 这两天&#xff0c;我为其中的预处理工具目录添加了数据标注模块&#xff0c;本文所介绍内容的代码见这里 该数据标注模块包含以下几个demo gui_tkinter_exercise.py …

PID控制器开发笔记之七:微分先行PID控制器的实现

前面已经实现了各种的PID算法&#xff0c;然而在某些给定值频繁且大幅变化的场合&#xff0c;微分项常常会引起系统的振荡。为了适应这种给定值频繁变化的场合&#xff0c;人们设计了微分先行算法。 1、微分先行算法的思想 微分先行PID控制是只对输出量进行微分&#xff0c;而…

python实现视频关键帧提取(基于帧间差分)

python实现视频关键帧提取&#xff08;基于帧间差分&#xff09; 在很多场景下&#xff0c;我们不想或者不能处理视频的每一帧图片&#xff0c;这时我们希望能够从视频中提取出一些重要的帧进行处理&#xff0c;这个过程我们称为视频关键帧提取。 关键帧提取算法多种多样&…

PID控制器开发笔记之八:带死区的PID控制器的实现

在计算机控制系统中&#xff0c;由于系统特性和计算精度等问题&#xff0c;致使系统偏差总是存在&#xff0c;系统总是频繁动作不能稳定。为了解决这种情况&#xff0c;我们可以引入带死区的PID算法。 1、带死区PID的基本思想 带死区的PID控制算法就是检测偏差值&#xff0c;…

在多任务(RTOS)环境中使用看门狗

最近在SEGGER的博客上看到一篇有关在实时操作系统使用看门狗的文章。从一个失败的太空项目出发&#xff0c;分析了看门狗的作用及使用&#xff0c;自我感觉很有启发&#xff0c;特此翻译此文并推荐给各位同仁。为了阅读方便&#xff0c;有些航天领域名词本人添加了注释&#xf…