简单的爬虫入门--爬取百度股票信息--来自mooc嵩老师视频_没有水杯和雨伞的工科男的博客-程序员ITS203

这个仅仅作为自己做这个项目的一些过程的记录和理解吧~~~  

1、import 部分,将使用到的一些库引入进来

import requests
import re
from bs4 import BeautifulSou

2、先做一个简单的例子,说明原理

https://gupiao.baidu.com/stock/sz300059.html   这个链接,是百度股票查询的网页,我们可以通过右键 查看网页源代码对其进行分析。我们就定义这个页面,是我们想要的页面信息

url='https://gupiao.baidu.com/stock/sz300059.html'
r=requests.get(url)

得到了返回的页面,我们定义html变量,为网页的整个内容

r.encoding = r.apparent_encoding
html=r.text

3、使用BeautifulSoup 做一锅汤

soup=BeautifulSoup(r,'html,parser')

我们对比一下不做汤,和做汤之后的区别吧

(1)不做汤

(2)做汤

可以看出更加结构化的不同喔

4、解析源网页的代码内容(静态网页)

可见上面的信息是分块的,所以我们的解析的方法如下:

同时看到这个的网址内容

刚好,我们可以通过获取这个class中的内容进行进一步的拓展

5、编写相关的代码 

获取对应的股票的名称:

stockName=soup.find(attrs={'class':'bets-name'})

上面i就是如果我这样写的运行的结果。

所以真正的name 应该如下:

name=stockName.text.split()[0]

其中[0] 表示取前面的那个。     

获取股票的今日信息:

那么这样信息肯定最好就直接存成列表的格式啊

那么,我们同样使用find功能

 

同样的对于对应的实际的数值

所以系列代码如下:

infoDict={}
stockName=soup.find(attrs={'class':'bets-name'})

infoDict.update({'股票名称':stockName.text.split()[0]})

stockInfo=soup.find('div',attrs={'class':'bets-content'})
keyList=stockInfo.find_all('dt')
keyVal=stockInfo.find_all('dd')
#to make it a list
 for i in range(len(keyList)):
     key=keyList[i].text
     val=valueList[i].text
     infoDict[key]=val   #建立字一个字典的幅值的方式,我们在原来的基础上继续增加新的

 

 

综上,是一个,静态原网页的提取的方式。

提取一系列的内容如下的代码, 是我按照老师教的写的,并且调试好的代码:作为参考吧   

import requests
from bs4  import  BeautifulSoup
import traceback
import  re



def getHTMLText(url,code='utf-8'):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding # 修改编码
        return r.text
    except:
        return ''

def getStockList(lst,stockURL):
    print('List information')
    html=getHTMLText(stock_list_url)
    #print(html)
    soup=BeautifulSoup(html,'html.parser')
    a=soup.find_all('a')

    '''
     <li><a target="_blank" href="http://quote.eastmoney.com/sh201000.html">R003(201000)</a></li>
    '''

    for i in a:
        try:
            # 个股的股票编号保存在lst中
            href = i.attrs['href']
            # print(type(href))
            lst.append(re.findall(r'[s][hz]\d{6}', href)[0])
            # findall返回列表,比如a=[sh012345],取0,就取出了里面的数字
            # 在append到lst里,这样lst就不会是[[sh201000], [sh201002]]这样
        except:
            continue
   # print(lst)
    print('ending list')




def getStockInfo(lst,stockURL,fpath):
    count=0   #进度条用的
    print('start information')
    for stock  in lst:
        url=stockURL+stock+'.html'
        print(url)
        html=getHTMLText(url)

        try:
            if html=='':
                continue
            infoDict={}
            soup=BeautifulSoup(html,'html.parser')
            #print(soup)
            stockInfo=soup.find('div',attrs={'class':'stock-bets'})
            print(stockInfo)
          #  print(stockInfo)
            #name=soup.find('div',attrs={'class':'bets-name'})
            name = soup.find('a', attrs={'class': 'bets-name'})
            print(name)
           # print(name)
            infoDict.update({'股票名称':name.text.split()[0]})
          #  print(infoDict)

            #print(stockInfo)
            keyList=stockInfo.find_all('dt')
            #print(keyList)
            valueList=stockInfo.find_all('dd')
            #print(valueList)
            for i in range(len(keyList)):
                key=keyList[i].text
                val=valueList[i].text
                infoDict[key]=val
            with open(fpath,'a',encoding='utf-8') as f:
                f.write(str(infoDict)+'\n')
                count = count+1
                print('\r当前速度:{:.2f}%'.format(count*100/len(lst)),end='')
        except:
            count = count + 1
            print('\r当前速度:{:.2f}%'.format(count * 100 / len(lst)), end='')
            traceback.print_exc()
            continue





if __name__=='__main__':
    stock_list_url='http://quote.eastmoney.com/stocklist.html'
    stock_info_url='https://gupiao.baidu.com/stock/'
    output_file='E:\BaiduStockInfo.txt'
    slist=[]
    getStockList(slist,stock_list_url)
    getStockInfo(slist,stock_info_url,output_file)



 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42066185/article/details/81304433

智能推荐

php如何不输出科学计数法,php怎么设置不用科学计数法_网易游戏雷火事业群的博客-程序员ITS203

php怎么设置不用科学计数法php设置不用科学计数法的方法:先使用number_format()函数通过千位分组来格式化数字,语法“number_format(number)”;然后通过echo语句输出格式化后的数字即可。推荐:《PHP视频教程》遇见科学记数法的时候解决方法就是使用php格式化数字函数:number_format()number_format() 函数通过千位分组来格式化数字。注释...

redis-trib.rb操作命令_程序~人生的博客-程序员ITS203

redis-trib.rb是官方提供的Redis Cluster的管理工具,无需额外下载,默认位于源码包的src目录下,但因该工具是用ruby开发的,所以需要准备相关的依赖环境。准备redis-trib.rb的运行环境wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.gzyum -y install zlib...

海康大华宇视等等安防监控摄像头转成WebRTC流实现Web浏览器超低延迟无插件直播新方案..._staritstarit的博客-程序员ITS203

@目录1、问题场景2、WEBRTC延时对比3、LiveNVR支持WEBRTC输出4、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务5、GB28181接入服务1、问题场景需要低延时的视频流监控播放,之前可以用rtmp的低延时播放(1秒左右),随着浏览器对rtmp的禁用,无插件的低延时播放怎么解决呢?webrtc的视频流播放来了,局域网测试,延时可以控制在(200ms-500ms)...

大家都在聊内卷,究竟内卷是什么意思,互联网行业真的内卷了么?_游戏大爷君的博客-程序员ITS203

闲来无事,日常吹水。这几年内卷这个词变得很流行,我经常在知乎里的各种互联网行业相关的问题当中看到。总是被拿来解释竞争激烈的就业行情以及指责大环境的糟糕。那么内卷究竟是什么意思,现在的互联网行业真的内卷了吗?内卷究竟是什么意思内卷内卷,这个词究竟是什么意思呢?内卷这个词是个舶来品,原本指的是复旧的收缩或者是器官恢复到原来的尺寸,后来被用来指一种社会或者文化模式在某一发展阶段达到一种确定的形式之后,便停滞不前或无法转化成另一种高级模式的现象。我个人觉得和中产收入陷阱的意思有点像,发展到了..

布局之extendedLayout与sizeToFit_SuAdrenine的博客-程序员ITS203

iOS 7以后在ViewController里面引进了一系列属性用于管理页面布局。  extendedLayout有几个相似的参数:edgesForExtendedLayout automaticallyAdjustsScrollViewInsets extendedLayoutIncludesOpaqueBars下面是Apple官方提供的文档解释,看过之后还是觉得太过于抽象,于是用代码来实验

Android使用CoordinatorLayout实现折叠并实现导航吸附_邻家的邻家的博客-程序员ITS203

先看下效果:1.分析下页面构成将页面分为三个部分2.接下来分析下页面构成1.为折叠区域2.为吸附区域3.为列表区域3.看下XML代码构成&amp;lt;android.support.design.widget.CoordinatorLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; xmlns:app=&quot;http:/...

随便推点

vue-element-xlsx在线读取Excel数据预览_普通网友的博客-程序员ITS203_vue xlsx 预览

vue-element-xlsx在线读取Excel数据预览1.安装XLSXnpm install xlsx -s2.复制过去就可以用&lt;template&gt; &lt;div&gt; &lt;!-- excel表格上传 --&gt; &lt;el-upload class="upload-demo" drag action="https://jsonplaceholder.typicode.com/posts/" ...

oracle事物不能提交,oracle – Hibernate错误:无法在活动的全局事务中打开自动提交..._低盐值用户的博客-程序员ITS203

我在部署应用程序时遇到错误.环境是:&gt; Jboss 7.1.3 Hibernate 4 JPA&gt; OJDBC:ojdbc6.jar堆栈跟踪如下,09:13:30,703 WARN [org.hibernate.engine.jdbc.internal.JdbcServicesImpl] (ServerService Thread Pool -- 127) HHH000341: Cou...

android根标签,Android布局技巧之include、merge与ViewStub标签的巧用_assassin chen的博客-程序员ITS203

前言在开发中UI布局是我们都会遇到的问题,随着UI越来越多,布局的重复性、复杂度也会随之增长。相信大家经常听到include、merge、ViewStub这样的标签,官方也提到这三种布局可用于布局的优化。今天就介绍下这三种布局的使用,记录下来,便于后续app中的使用。include布局重用app开发过程中,会遇到不同页面里有相同的布局,这时我们可以将这些通用的布局提取出来到一个单独的layout文...

【JAVA学习】Linux(ubuntu)下成功配置jdk1.7.0_51_走着的方头狮的博客-程序员ITS203

我是在官网上下载的 jdk-7u51-linux-x64.tar.gz 64位的压缩包 下载链接:http://www.eclipse.org/不过什么版本也无所谓了,只要跟你的操作系统配套64位就下载64位的JDK,32位的就下载32的JDK。先简单介绍几个要用到的命令,没有提到的去查一下,很简单:1.移动一个文件夹到另外一个文件夹:mv(空格)/要移动的文件夹...

C语言编程题:用泰勒级数求自然数e的近似值_Anthony_BW的博客-程序员ITS203_泰勒公式求e的近似值

题目:C语言中用泰勒级数求e的近似值,直到最后一项小于 10的负6次方为止次方 e=1+1/1!+1/2!+...+1/n!描述:观察公式前两项可以直接不用计算,合并为2,设置三个float型变量,e为结果,s为分子,i为分母,通过i累加再相乘之后实现分母的阶乘变化。 输入:不需要输入,在main函数内设置好初始值 输出:输出e的结果。#include ...

oracle- 审计日志_Z14523299999的博客-程序员ITS203

一、审计功能关闭1、查看审计功能是否开启?su – oraclesqlplus “/as sysdba”SQL&gt; show parameter audit_trailNAME TYPE VALUE------------------------------------ ------...

推荐文章

热门文章

相关标签