文章目录

  • 写在前面
  • 一、准备工作
  • 二、具体步骤
    • 1.建立工程和Spider模板
    • 2.编写Spider
    • 3.编写pipelines
    • 4.更改settings
    • 5.运行爬虫
  • 三、注意事项
    • 1.文件内容为空
    • 2.内容包含其他标签
    • 3.不足之处
  • 引用源自

写在前面

  这个实例我差不多用了一周的时间,终于把所有bug都抓完了,不过还是有一点点遗憾,就是正则表达式部分写的不够完美(本人目前智力、精力实在有限),如果各位大佬有更好的欢迎评论指教。下面我将把我这几天踩的坑,给各位小伙伴们介绍一下,希望各位能够成功避坑,同时也把我的不足之处给大家说明。好了,话不多说,进入正题。

一、准备工作

  这一部分主要就是选取网站和对网站源代码的查看及观察,具体步骤我在之前的文章写过,有需要的小伙伴可以参考。

传送门: https://blog.csdn.net/weixin_44578172/article/details/109391135

本例选取的是股城网: https://hq.gucheng.com/gpdmylb.html

二、具体步骤

1.建立工程和Spider模板

  首先win+R 输入cmd进入command模式

scrapy startproject 项目名(GuchengStocks)
cd 项目名(GuchengStocks)
scrapy genspider 爬虫名(stocks) 根链接目录(hq.gucheng.com)

2.编写Spider

  这一部分是关键,要编写获取页面和解析页面的代码

import scrapy
import reclass StocksSpider(scrapy.Spider):name = "stocks"start_urls = ['https://hq.gucheng.com/gpdmylb.html']def parse(self, response):for href in response.css('a::attr(href)').extract():try:stock = re.findall(r'[S][HZ]\d{6}', href)[0]url = 'https://hq.gucheng.com/' + stockyield scrapy.Request(url, callback=self.parse_stock, headers={'user-agent': 'Mozilla/5.0'})#第二个参数callback给出了处理当前url给出的新的函数即parse_stockexcept:continuedef parse_stock(self, response):infoDict = {}stockName = response.css('.stock_price.clearfix')#stockInfo = response.css('')name = response.css('h3').extract()[0]keyList = stockName.css('dt').extract()valueList = stockName.css('dd').extract()for i in range(len(keyList)):key = re.findall(r'<dt>.*<', keyList[i])[0][4:-1]#除去爬取的字符串中的无用部分,如&nbsp等,网页抓取时会因为编码原因转化成\xa0,所以我们需要进行替换key = key.replace('\u2003', '')key = key.replace('\xa0', '')#dt标签中存在sup标签,可以用''替换掉key = key.replace('<sup></sup>', '')try:val = re.findall(r'>.*<', valueList[i])[0][1:-1]except:val = '--'infoDict[key] = valinfoDict.update({'股票名称': re.findall('<h3>.*\)', name)[0][4:]})yield infoDict

3.编写pipelines

  这一部分是在类中定义函数,设置文件的开启和关闭及对应的处理方法

class GuchengstocksInfoPipeline(object):#openspider指的是当一个爬虫被调用时对应的pipline启动的方法def open_spider(self, spider):self.f = open('GuchengStockInfo.txt', 'w')#close_spider指的是当一个爬虫关闭时对应的pipline启动的方法def close_spider(self, spider):self.f.close()#对每一个item项进行处理时对应的方法,也是最主体的函数def process_item(self, item, spider):try:line = str(dict(item)) + '\n'self.f.write(line)except:passreturn item

4.更改settings

  因为我们新建了一个类,没有用系统的默认类,所以要在相应位置更改配置

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {'GuchengStocks.pipelines.GuchengstocksInfoPipeline': 300,
}

5.运行爬虫

键入命令

scrapy crawl 爬虫名(stocks)

之后就可以在项目目录下看到有.txt文件了,文件中就是我们爬取到的数据

三、注意事项

  最后说一下我的采坑经历及不完美的地方

1.文件内容为空

  这是让我最头疼的一个问题,我认为我的逻辑没有问题,但爬取后的结果内容就是为空,这里我用的是css选择器。最后在debug的时候灵光一现,想到是不是我的class属性中包含空格的原因导致选择器发生错误,结果上网一查果然有相关资料。比如我要选择的类的属性是"stock_price clearfix",这样提取失败因为在css选择器中,空格表示取子代元素 所以选择器错误地把"stock_price clearfix"当成两个元素看待了,自然提取不到任何元素。解决方法是把空格用"."代替,即stock_price.clearfix就可以了。

2.内容包含其他标签

  我在成功解决上面问题后,发现爬取的数据中包含了dt的子标签sup,并且我多次更改正则表达式也没能将其去掉,最终选择用replace函数去替换他。

key = key.replace('<sup></sup>', '')

果然解决了(啊,真香~)

3.不足之处

  虽然replace()函数能够帮助解决一些问题,但并不是真正高级码农所为(我还是太菜了),因为我本身比较菜,最近精力也不太够,所以只能先做到这了,以后再慢慢研究完美的正则表达式的方式,当然各位大佬如果能帮忙解决就再好不过了,欢迎评论指教~

  本篇完,如有错误欢迎指出~

引用源自

中国大学MOOC Python网络爬虫与信息提取
https://www.icourse163.org/course/BIT-1001870001

Python爬虫入门实例九之Scrapy框架爬取股票信息(亲测有效)相关推荐

  1. Python爬虫实战之二 - 基于Scrapy框架抓取Boss直聘的招聘信息

    Python爬虫实战之三 - 基于Scrapy框架抓取Boss直聘的招聘信息 ---------------readme--------------- 简介:本人产品汪一枚,Python自学数月,对于 ...

  2. 从入门到入土:Python爬虫学习|实例练手|详细讲解|爬取腾讯招聘网|一步一步分析|异步加载|初级难度反扒处理|寻找消失的API来找工作吧

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  3. python爬虫教程下载-Python爬虫入门教程!手把手教会你爬取网页数据

    其实在当今社会,网络上充斥着大量有用的数据,我们只需要耐心的观察,再加上一些技术手段,就可以获取到大量的有价值数据.这里的"技术手段"就是网络爬虫.今天就给大家分享一篇爬虫基础知识 ...

  4. python爬虫入门 之 移动端数据的爬取

    第七章 移动端数据的爬取 基于某一款抓包工具 : fiddler ,青花瓷 ,miteproxy 7.1 fiddler 基本配置 7.1.1fiddler简介和安装 什么是Fiddler? Fidd ...

  5. python爬虫入门教程04:招聘信息爬取

    前言

  6. Python爬虫入门教程10:彼岸壁纸爬取

    基本开发环境

  7. python spider怎么用_python爬虫入门(七)Scrapy框架之Spider类

    Spider类 Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取的动作 ...

  8. 【Python爬虫系列教程 28-100】小姐姐带你入门爬虫框架Scrapy、 使用Scrapy框架爬取糗事百科段子

    文章目录 Scrapy快速入门 安装和文档: 快速入门: 创建项目: 目录结构介绍: Scrapy框架架构 Scrapy框架介绍: Scrapy框架模块功能: Scrapy Shell 打开Scrap ...

  9. Python网络爬虫数据采集实战:Scrapy框架爬取QQ音乐存入MongoDB

    ​    通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本 ...

最新文章

  1. selenium 文件下载
  2. couldn't register *** with the bootstrap server. Error: unknown error code.
  3. mysql5.7.24 rpm安装_centos7下安装mysql5.7.24
  4. 补习系列(5)-springboot- restful应用
  5. float强制转换的问题及解释
  6. linux里用户权限:~$,/$,~#,/#的区别与含义
  7. Spark-Streaming
  8. linux集群之LVS入门和企业级实战(续一)
  9. [数分提高]2014-2015-2第9教学周第2次课 (2015-04-30)
  10. LoadRunner测试Google Suggest
  11. UIScrollerView ,UIPageControl混搭使用,添加定时器,无限循环滚动
  12. 最新个人主页源码最新非泛滥版本
  13. 微信Native支付申请接入流程-避免踩坑指南
  14. 掘金 AMA:听蚂蚁金服高级技术专家-- 章耿谈微服务、架构、日志那些事
  15. 如何通过服务号开通并认证小程序
  16. matlab/simulink电力电子仿真斜坡信号Ramp设置和使用
  17. 数据结构与算法(十一)哈夫曼树及其应用
  18. LPC55S69开发笔记
  19. 多御安全浏览安卓版升级尝鲜,新增下载管理功能
  20. Windows 下基于 MikTeX 的 Latex 环境配置小记

热门文章

  1. 查询性能显著提升,Apache Doris 向量化版本在小米 A/B 实验场景的调优实践
  2. bzoj3663/4660CrazyRabbit bzoj4206最大团
  3. 蚂蚁金服上市,别人家的程序员已经实现财富自由!
  4. 江阴 java_江阴学java编程,江阴java编程学习哪里好,江阴java编程学习一般要多久才能学会...
  5. struts2实现不刷新页面执行action
  6. Game theory: Prison breakthrough
  7. python写csv文件分隔符问题
  8. 用户体验地图——互联网平台建设
  9. 安装cartographer出现的问题及解决方法
  10. 程序员面试还不敢要高薪资?程序员面试谈薪资的6大技巧分享,最全Java架构师技能图谱