爬虫入门经典(八) | 一文带你快速爬取股吧

不温卜火 等级 578 0 0

  大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行更新,博客主页:https://buwenbuhuo.blog.csdn.net/爬虫入门经典(八) | 一文带你快速爬取股吧

PS:由于现在越来越多的人未经本人同意直接爬取博主本人文章,博主在此特别声明:未经本人允许,禁止转载!!!

目录


爬虫入门经典(八) | 一文带你快速爬取股吧


推荐

爬虫入门经典(八) | 一文带你快速爬取股吧
  ♥各位如果想要交流的话,可以加下QQ交流群:974178910,里面有各种你想要的学习资料。♥

  ♥欢迎大家关注公众号【不温卜火】,关注公众号即可以提前阅读又可以获取各种干货哦,同时公众号每满1024及1024倍数则会抽奖赠送机械键盘一份+IT书籍1份哟~♥
爬虫入门经典(八) | 一文带你快速爬取股吧
giao!连续用了正则爬取了两个网站。博主表示是抗拒的。所以本次博主任性的选择了用xpath爬取股吧的相关信息。

爬虫入门经典(八) | 一文带你快速爬取股吧

一、lxml语法的简单回顾

爬虫入门经典(八) | 一文带你快速爬取股吧
爬虫入门经典(八) | 一文带你快速爬取股吧
爬虫入门经典(八) | 一文带你快速爬取股吧
爬虫入门经典(八) | 一文带你快速爬取股吧

二、网页的简单分析

咳咳,爬取网站信息,没有网址可怎么行呢?安排:
http://guba.eastmoney.com/
在打开网页之后,我们发现界面是这样的
爬虫入门经典(八) | 一文带你快速爬取股吧
通过查看页面,我们可以看到标红部分就是我们准备爬取的内容。当然了,在进行页面解析之前,我们还有一件事情要做。我们既然要爬取内容,就不可能只爬取一页内容对吧。我们先来分析下每一页之间有没有关联,首先我们看下后几页

https://guba.eastmoney.com/default,99_2.html
https://guba.eastmoney.com/default,99_3.html
https://guba.eastmoney.com/default,99_4.html 

以此,我们判断出第一页是不是

https://guba.eastmoney.com/default,99_1.html 

我们可以验证下
爬虫入门经典(八) | 一文带你快速爬取股吧
🆗,我们的猜想是正确的。因此,我们知道我们需要刚开始的链接分别为

base_url = "http://guba.eastmoney.com/"
start_url = "http://guba.eastmoney.com/default,99_1.html" 

爬虫入门经典(八) | 一文带你快速爬取股吧

三、主体部分分析及解析提取

打开开发者选项,我们可以看到对应的关系
爬虫入门经典(八) | 一文带你快速爬取股吧
这个时候,我们的思路应该是通过xpath先把我们所要解析的单个主提先提取出来,然后循环提取、追加。

html_obj = etree.HTML(html)
# 使用xpath语法提取
li_list = html_obj.xpath('//ul[@class="newlist"]/li')
print(li_list)
print(len(li_list)) 

爬虫入门经典(八) | 一文带你快速爬取股吧
从上图我们可以看到我们已经获取了所有的<li></li>标签。下面就是把他们每个比如阅读、评论等这些分别提取出来。

  • 1.阅读
    爬虫入门经典(八) | 一文带你快速爬取股吧
  • 2.评论
    爬虫入门经典(八) | 一文带你快速爬取股吧
  • 3.标题
    爬虫入门经典(八) | 一文带你快速爬取股吧
  • 4.URL
    爬虫入门经典(八) | 一文带你快速爬取股吧
  • 5.作者
    爬虫入门经典(八) | 一文带你快速爬取股吧
  • 6.更新时间
    爬虫入门经典(八) | 一文带你快速爬取股吧
    分析完成!下面就可以看下代码实现了:
    爬虫入门经典(八) | 一文带你快速爬取股吧
 item = {}
            item["read"] = li.xpath("./cite[1]/text()")[0].strip()
            item["comment"] = li.xpath("./cite[2]/text()")[0].strip()
            item["name"] = li.xpath("./span/a[1]/text()")[0]
            if li.xpath("./span/a[2]"):
                item["title"] = li.xpath("./span/a[2]/text()")[0]
            else:
                item["title"] = ""
            if li.xpath("./span/a[2]/@href"):
                item["url"] = self.base_url + li.xpath("./span/a[2]/@href")[0]
            else:
                item["url"] = ""
            item["author"] = li.xpath("./cite[3]/a/font/text()")[0]
            item["date"] = li.xpath("./cite[4]/text()")[0].strip()
            items.append(item)

            print(items) 

爬虫入门经典(八) | 一文带你快速爬取股吧
我们可以看到我们得到的结果是正确的。至于为什么上面添加的有判断语句,是因为每个网站都有其反爬手段,这里博主直接给出了完整代码。如果有感兴趣的童鞋,可以把判断语句去掉,自行查看验证,并修改。这样可以增强记忆。

好了,内容方面已经解析完成,下面我们就需要梳理翻页的思路了。

爬虫入门经典(八) | 一文带你快速爬取股吧
我们通过上面的分析

https://guba.eastmoney.com/default,99_1.html
https://guba.eastmoney.com/default,99_2.html
https://guba.eastmoney.com/default,99_3.html
https://guba.eastmoney.com/default,99_4.html 

可以看到每一页之间都是有联系的,每一页的网址也只是变动了一个数字而已,并且我们通过查看网页,发现网页也只有12页,因此我们可以这样完成模拟

start_url = "http://guba.eastmoney.com/default,99_{}.html"

for i in range(1,13):
    # 获取url
    pageLink = start_url.format(i)
    print(pageLink) 

爬虫入门经典(八) | 一文带你快速爬取股吧
不过博主在此给出的是另一种写法

通过这种解析方式可以自动获取下一页的网址
爬虫入门经典(八) | 一文带你快速爬取股吧
通过这样,我们只需通过拼接就可以达到每一页的网址

 #提取下一页
        next_url = html_obj.xpath('//a[contains(text(),"下一页")]/@href')
        if next_url:
            next_url = self.base_url + next_url[0]
            print(next_url) 

四、完整代码

# encoding: utf-8
'''
  @author 李华鑫
  @create 2020-10-07 9:20
  Mycsdn:https://buwenbuhuo.blog.csdn.net/
  @contact: 459804692@qq.com
  @software: Pycharm
  @file: 爬股吧.py
  @Version:1.0

'''
import requests
import re
import time
import random
from lxml import etree

class Spider:
    def __init__(self):
        self.base_url = "http://guba.eastmoney.com/"
        self.start_url = "http://guba.eastmoney.com/default,99_1.html"
        self.headers = {
            "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
        }
        self.items = []
        self.index = 1

    def get_content(self, url):
        """获取url对应的内容"""
        time.sleep(random.random()*3)
        response = requests.get(url=url, headers=self.headers)
        return response.content.decode("utf-8")

    def parse_html(self, html):
        """解析html获取数据"""
        # 解析html
        html_obj = etree.HTML(html)
        # 使用xpath语法提取
        li_list = html_obj.xpath('//ul[@class="newlist"]/li')
        # 循环
        for li in li_list:
            print(self.index)
            item = {}
            item["read"] = li.xpath("./cite[1]/text()")[0].strip()
            item["comment"] = li.xpath("./cite[2]/text()")[0].strip()
            item["name"] = li.xpath("./span/a[1]/text()")[0]
            if li.xpath("./span/a[2]"):
                item["title"] = li.xpath("./span/a[2]/text()")[0]
            else:
                item["title"] = ""
            if li.xpath("./span/a[2]/@href"):
                item["url"] = self.base_url + li.xpath("./span/a[2]/@href")[0]
            else:
                item["url"] = ""
            item["author"] = li.xpath("./cite[3]/a/font/text()")[0]
            item["date"] = li.xpath("./cite[4]/text()")[0].strip()
            self.items.append(item)
            self.index+=1

        #提取下一页
        next_url = html_obj.xpath('//a[contains(text(),"下一页")]/@href')
        if next_url:
            next_url = self.base_url + next_url[0]
            html = self.get_content(next_url)
            self.parse_html(html)

    def save(self):
        """保存"""
        with open("./股吧.txt", "a", encoding="utf-8") as file:
            for item in self.items:
                file.write(",".join(item.values()))
                file.write("\n")

    def start(self):
        print("爬虫开始...")
        self.parse_html(self.get_content(self.start_url))
        print("爬虫结束...")
        print("保存开始...")
        self.save()
        print("保存结束...")

if __name__ == '__main__':
    Spider().start() 

五、保存成功截图

爬虫入门经典(八) | 一文带你快速爬取股吧
爬虫入门经典(八) | 一文带你快速爬取股吧
爬虫入门经典(八) | 一文带你快速爬取股吧

美好的日子总是短暂的,虽然还想继续与大家畅谈,但是本篇博文到此已经结束了,如果还嫌不够过瘾,不用担心,我们下篇见!


爬虫入门经典(八) | 一文带你快速爬取股吧

  好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
  如果我的博客对你有帮助、如果你喜欢我的博客内容,请“点赞” “评论”“收藏”一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
  码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦!

爬虫入门经典(八) | 一文带你快速爬取股吧
爬虫入门经典(八) | 一文带你快速爬取股吧

本文转自 https://buwenbuhuo.blog.csdn.net/article/details/109254233,如有侵权,请联系删除。

收藏
评论区

相关推荐

爬虫入门经典(八) | 一文带你快速爬取股吧
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行
被“词云”包围的冰冰会更好看吗?安排
(https://imghelloworld.osscnbeijing.aliyuncs.com/b299933deefc692934e8cc6141ab3894.png) 大家好,我是小五🐶 昨天「凹凸数据」发了一篇张同学投稿的文章《用Python爬取王冰冰vlog弹幕并制作词云(https://mp.weixin.qq.com/
厉害了,股票K线图还能这么画!
大家好,我是小五🐶发现大家还是最喜欢股票基金话题呀~那说到股票基金就不得不提——**K线图**!那小五今天就带大家👉用`python`来轻松绘制高颜值的K线图🚀 获取股票交易数据 巧妇难为无米之炊,做可视化也离不开数据。本文我将以酱香型科技——**贵州茅台**为例,获取它的近期股票数据并绘制K线图。如果我们要特意去动手去写爬虫,就显得有些多余了,这里
爬取千万条基金数据是怎样的体验?
大家好,我是朱小五 昨天的文章中就提了一嘴,最近爬了一些股票和基金数据。再加上我们之前也做过,那就简单跟大家说一下如何爬取tiantian基金的数据。基金代码爬取基金的数据有个必要条件就是要知道基金代码,如何获取呢,打开官网找吧。点了一圈,发现了基金代码的主页,寻思翻页爬取就完事了http://fund.eastmoney.com/allfund.html
3000字 “婴儿级” 爬虫图文教学 | 手把手教你用Python爬取 “实习网”!
1\. 为"你"而写 这篇文章,是专门为那些 "刚学习" Python爬虫的朋友,而专门准备的文章。希望你看过这篇文章后,能够清晰的知道整个 "爬虫流程"。从而能够 "独立自主" 的去完成,某个简单网站的数据爬取。好了,咱们就开始整个 “爬虫教学” 之旅吧!2\. 页面分析 ① 你要爬取的网站是什么?首先,我们应该清楚你要爬去的网站是什么?由于这里我们想要
GitHub 开源项目文章爬虫,懒人必备!
### hello,小伙伴们大家好 ![](https://oscimg.oschina.net/oscnet/up-3054ae3384b5378ced55174262a64f6a429.png) 今天给大家介绍的开源项目是`文章爬虫利器` 爱收集的小伙伴们的福利哦! 假如你在工作中接到产品小姐姐的需求,需求是获取V2EX,知乎,简书,知否(Seg
Python3 网络爬虫:下载小说的正确姿势
点击上方“ **Python爬虫与数据挖掘** ”,进行关注 回复“**书籍**”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 少年心事当拂云。 ![](https://oscimg.oschina.net/oscnet/09902b71501b9e8c3cb656b5dfbbb0552e0.jpg) 1 **
Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性SVM
转载请注明作者和出处: https://zhuanlan.zhihu.com/ml-jack 机器学习知乎专栏:https://zhuanlan.zhihu.com/ml-jack CSDN博客专栏:http://blog.csdn.net/column/details/16415.html Github代码获取:https://github.c
Python基础练习(一)中国大学定向排名爬取
说好的要从练习中学习爬虫的基础操作,所以就先从容易爬取的静态网页开始吧! 今天要爬取的是最好大学网上的2018年中国大学排名。我个人认为这个是刚接触爬虫时用来练习的一个很不错的网页了。 在说这个练习之前,给新着手学习爬虫的同学提供一个中国MOOC上北京理工大学嵩天老师的视频, [Python网络爬虫与信息提取](https://www.oschina.n
Python爬取暴走漫画动态图
最近再之乎上看到比较好的Python爬虫教程,看过之后对爬虫有了大概的了解,随后自己写了个爬取[暴走漫画](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fbaozoumanhua.com%2Fcatalogs%2Fgif)动图的爬虫练练手,另外附上[Python爬虫教程](https://w
Python爬取网易云歌单
#### 基本配置: * Python版本:3.7 #### 相关模块: from urllib import parsefrom lxml import etreefrom urllib3 import disable_warningsimport requests #### 案例关键点: 使用单线程爬取,未登录,爬取网易云
Python爬取网易云音乐辑的图片、专辑名和专辑出版时间
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 作者:阿里波特 来源:CSDN **Python爬虫、数据分析、网站开发等案例教程视频免费在线观看** https://space.bilibili.com/523606542 ![](https://oscimg.oschina.net/
Python爬虫
Python爬虫-xpath ============== * Python爬虫-xpath * 说明 * 再说明 * 插件推荐 * 语法讲述 * 举栗子 * 代码里使用 * 实战句子迷 * 需要的总结: 说明 -- 关于Python爬虫请求数据方面的知
Scrapy学习
**基础知识** ****爬虫发展史**** ****![](https://images2018.cnblogs.com/blog/1275420/201805/1275420-20180521205830811-1094218837.png)**** **爬虫去重** 1. 存储到数据库中 存取速度慢
Scrapy爬取遇到的一点点问题
学了大概一个月Scrapy,自己写了些东东,遇到很多问题,这几天心情也不大好,小媳妇人也不舒服,休假了,自己研究了很久,有些眉目了 利用scrapy 框架爬取慕课网的一些信息 步骤一:新建项目     scrapy startproject muke     进入muke     scrapy genspider mukewang imooc.co