python3爬虫基本操作——抓取股票信息

 
  作为一个python爬虫小白的个人理解,python爬虫原理就是发送请求并获得服务器响应,得到html的页面代码内容,通过解

析内容然后定位获取想要的数据信息并保存。说不定还能得到正常网页浏览之外的数据,哈哈。
 
  今天用功能强大的python3爬虫尝试一下抓取相关的股票信息。网址:http://www.xuangubao.cn/

目的:得到网站的“利好”标签和对应的股票名称,并保存。

环境:python3.x和pycharm



requests+Beautifulsoup抓取静态网页:


selenium+Beautifulsoup抓取动态加载:


1. requests库发送请求,获取响应内容的字符串格式

 
  requests库内有许多的模拟浏览器行为的请求方法,使用GET请求获取html

  参数:requests.get(url,params,**kwargs)

      url:需要爬取的网站地址

     params:是url的额外参数,字典或者字节流格式,可选。

     **kwargs:12个控制访问的参数,在这次的爬取过程中只使用到了hearders和timeout参数。

  请求头hearders在python爬虫过程中非常重要,它能是爬虫模拟浏览器的行为进行请求,而不会被服务器当成爬虫程序拒绝访问。其中的"User-Agent"是必不可少的,对于刚入门的我,一般也只添加这一个参数就可以。

    
 
 
 将相应得到的二进制形式内容解码成“utf-8”

  
 
 输出检查 一下获取到的内容是否正确:print(response)

      python3爬虫基本操作——抓取股票信息_第1张图片
 
 

 可以看到是正确的html格式,并非是乱码


  最后,函数返回得到的网页源码

  整个函数如下:

  python3爬虫基本操作——抓取股票信息_第2张图片



简单讲一下在网页上查看html的源码
(1)首先,先进入网站






(2)随意选一个位置 --> 点击鼠标右键 --> 点击检查



python3爬虫基本操作——抓取股票信息_第3张图片

python3爬虫基本操作——抓取股票信息_第4张图片
 
 乍一看跟pyhon代码获取的内容有点像,都像一个树状结构,其实两者相差不多。


2.Beautifulsoup解析并获取指定的内容

  
 Beautifulsoup是python第三方库,可以从HTML或XML文件中根据我们设定的条件提取我们想要的数据。

 
 Beautifulsoup将复杂的HTML文档转换成一个复杂的树形结构,即一个Beautifulsoup对象,其每个结点都是

python对象,当我们获取网页内容就是提取对象里面的内容。

 
个人简单理解成Beautifulsoup将python语言不能直接处理的HTML文档树转换成一个python对象,也以树状结

构进行存储。在python里面对这个对象进行操作就可以了。
  

 (1)首先,构建一个Beautiful对象:  

  

第一个参数是要解析的HTML文本字符串,第二个参数是选择解析器解析HTML。

代码中的data就是函数返回的网页源码,'html.parser'是python内置的解析器,建议用'lxml',它执行速度比
'html.parser'快,但是需要额外安装。




(1)提取想要的信息

 
  构建并解析之后,就可以进行遍历查找了。

 
 那么问题来了,如何查找?根据什么来查找?用什么来查找?

根据网页源码内容的一个结点为例: 


   python3爬虫基本操作——抓取股票信息_第5张图片
     
    

   一个Beautifulsoup对象内基本包含以下四个内容对象:


     Tag:标签,最基本的信息组织单元,分别用<>和标明开头和结尾。如上图中的 和
表示结尾

   
    Name:标签的名字。如图,
     
  
    Attributes:标签的属性,字典形式,格式:.attrs

    
    NavigableString:标签内非属性字符串,<>...中的字符串,格式:.string
    
   
    comment:标签内字符串的注释部分,一种特殊的Comment类型

   
   例如前一段代码中得到了一个soup对象,通过soup.string输出非属性字符串,对象的操作这部分就不详解了。
 
 
 搜索文档树是通过指定标签名来搜索元素,另外还可以通过标签的属性值来精确定位某个结点元素。在

Beautifulsoup中有find、findall、find_all、select等方法提取信息,根据不同版本会有区分。我的

Beautifulsoup4使用find_all函数。

    
  find_all(name,attrs,recursive,string,**kwargs)

  
  详细参数介绍我就不赘述了,只简单讲解一下我的代码使用到的基本操作。

  
  
   查找文档树中标签名字为'li',属性中class='news-item'的内容。class在python里是关键字,所以为 class_=
  

这条语句执行完后,item保存的是网页内所有文章的所有内容。

  先筛选出文章内容,然后返回这个对象。

 
 之后就是根据自己的思路,写好逻辑代码并得到有 '利好'标签的文章,再得到股票的名称,不多说,直接上代码

python3爬虫基本操作——抓取股票信息_第7张图片



最后执行:


结果:

  



激动人心的时刻到了,赶紧打开选股宝网站看看。

python3爬虫基本操作——抓取股票信息_第8张图片

 


究竟对不对呢?哈哈,网页中的确也只有这两个显示是利好的。

  不过是否有疑问。在网页上还有点击加载更多,也就是其实还有更多的数据等着我们去爬呢。


python3爬虫基本操作——抓取股票信息_第9张图片  




但是这两三天找了好久的资料,不知道是不是requests库只能静态抓取,而不能支持动态加载,或者是自己对


requess库+Beautifulsoup解析动态加载的认知还不到位。修改了请求头里的全部信息再加上解析动态加载点击的


json,然后返回“点击加载更多”的网址继续请求数据。可到最后还是没有成功。感觉整个脑袋都不属于自己了。
  



 于是干脆直接霸王硬上弓,使用selenium库,解析数据仍然使用Beasoup库。selenium模拟人对浏览器的动作

(比如点击加载下一页),实现操作浏览器的自动化(打开网页、输入文字、点击加载等)。



只需要将发送请求的Requests换成selenium,网页的解析依旧使用Beautifulsoup


4.selenium库

 
    selenium是python的第三方库,需要安装。selenium可以模拟真实浏览器,它是一个自动化测试工具,支持多

种浏览器,包括Chrome、FireFox、IE、Safair,听起来非常不错,功能也很强大。selenium的一个特点是电脑必

须安装有浏览器和浏览器驱动。比如要使用谷歌浏览器模拟网页行为,则需要下载谷歌浏览器和谷歌浏览器驱动。

  
   只需要换掉get_Hteml函数的内容就可以。

   简单介绍一下,需要使用到time模块,等待浏览器加载,

  (1)选择自己的浏览器并打开


      diver=webdriver.Chrome()


      我的是Chrome浏览器,所以webdriver后面是Chrome(),一般里面不需要参数就可以了。
    
     
     不过我的会出现一个错误。

     

     系统找不到我的浏览器驱动,建议安装,将浏览器驱动路径添加到系统变量PATH中也不行。


    最后在网上查找到Chrome浏览器的方法,在代码中添加路径,具体原理不是太懂,不过添加之后Chrome浏览

器终于能使用了。需要使用os模块


    

    

   通过get()方法打开浏览器


    

    

    当执行此行代码时会自动打开浏览器,浏览器会在桌面上弹出,不需要进行操作,等待就可以了
  

  (2)模拟浏览器行为

     
  主要是向下滑动和点击加载更多,这个是selenium本身就已经制定好了规则,只需拿来使用就可以了,非常方便、快速。

    

       python3爬虫基本操作——抓取股票信息_第10张图片

      这段代码只是下拉到浏览器网页最下面并点击了一次,对其进行循环就可以自己设定点击加载想要的次数了,即加载多少页

 


修改后的get_Html函数



python3爬虫基本操作——抓取股票信息_第11张图片


最后运行结果

python3爬虫基本操作——抓取股票信息_第12张图片


可以看出比之前多了一些股票名称的信息,如果循环点击加载,就可以获得更多的股票的状态,不过等待的时间也


就会更加长。还有可以用withopen()对读取到的数据进行txt文本存储,在这我就不详细介绍了。


第一次写博客,希望大家能多多谅解,如果有需要改正的地方和能提高bi格的方法,可以在博客下方指点一下

  


 
  

你可能感兴趣的:(python3爬虫基本操作——抓取股票信息)