Python 网络爬虫笔记11 – Scrapy 实战


Python 网络爬虫系列笔记是笔者在学习嵩天老师的《Python网络爬虫与信息提取》课程及笔者实践网络爬虫的笔记。

课程链接:Python网络爬虫与信息提取
参考文档:
Requests 官方文档(英文)
Requests 官方文档(中文)
Beautiful Soup 官方文档
re 官方文档
Scrapy 官方文档(英文)
Scrapy 官方文档(中文)


股票数据 Scrapy 爬虫


介绍:

  • 爬取中国股市的股票信息, 从东方财富网获取股票列表,根据股票列表逐个到百度股票获取个股信息根据股票列表逐个到百度股票获取个股信息,将结果存储到文件将结果存储到文件
  • 东方财富网:http://quote.eastmoney.com/stocklist.html
  • 百度股票:https://gupiao.baidu.com/stock/
  • 单个股票:https://gupiao.baidu.com/stock/sz002439.html

步骤:

  1. 建立工程和 Spider 模板

    # cmd 依次输入以下命令
    scrapy startproject scrapy_stocks
    cd scrapy_stocks
    scrapy genspider stocks gupiao.baidu.com
    
  2. 编写Spider,处理链接爬取和页面解析

    • 配置stocks.py文件
    • 修改对返回页面的处理
    • 修改对新增URL爬取请求的处理
  3. 编写ITEM Pipelines,处理信息存储

    • 配置pipelines.py文件
    • 定义对爬取项(Scraped Item)的处理类
    • 配置ITEM_PIPELINES选项
    # 在settings.py文件中配置ITEM_PIPELINES选项,改为自己写的类名
    ITEM_PIPELINES = {'scrapy_stocks.pipelines.ScrapyStocksPipeline': 300,}
    
  4. 运行爬虫

    # cmd输入以下命令
    scrapy crawl stocks
    
  5. 配置优化

    修改 settings.py文件的相应项

    说明
    NCURRENT_REQUESTS Downloader最大并发请求下载数量,默认32
    NCURRENT_ITEMS Item Pipeline最大并发ITEM处理数量,默认100
    NCURRENT_REQUESTS_PER_DOMAIN 每个目标域名最大的并发请求数量,默认8
    NCURRENT_REQUESTS_PER_IP 每个目标IP最大的并发请求数量,默认0,非0有效

stocks.py 文件:

# -*- coding: utf-8 -*-
import scrapy
import reclass StocksSpider(scrapy.Spider):name = "stocks"start_urls = ['http://quote.eastmoney.com/stocklist.html']def parse(self, response):"""解析 Response 对象,产生额外的爬取请求"""for href in response.css('a::attr(href)').extract():try:stock = re.findall(r's[hz]\d{6}', href)[0]url = 'https://gupiao.baidu.com/stock/' + stock + '.html'yield scrapy.Request(url, callback=self.parse_stock)except:continuedef parse_stock(self, response):"""解析 Response 对象"""info_dict = {}stock_info = response.css('.stock-bets')name = stock_info.css('.bets-name').extract()[0]key_list = stock_info.css('dt').extract()value_list = stock_info.css('dd').extract()for i in range(len(key_list)):key = re.findall(r'>.*</dt>', key_list[i])[0][1:-5]try:val = re.findall(r'\d+\.?.*</dd>', value_list[i])[0][0:-5]except:val = '--'info_dict[key] = valinfo_dict.update({'股票名称': re.findall('\s.*\(', name)[0].split()[0] + re.findall('\>.*\<', name)[0][1:-1]})yield info_dict

pipelines.py 文件:

class BaiduStocksPipeline(object):"""直接返回解析结果"""def process_item(self, item, spider):return itemclass BaiduStocksInfoPipeline(object):"""保存解析结果到文件"""def open_spider(self, spider):self.f = open('BaiduStockInfo.txt', 'w')def close_spider(self, spider):self.f.close()def process_item(self, item, spider):try:line = str(dict(item)) + '\n'self.f.write(line)except:passreturn item

settings.py 文件:

ITEM_PIPELINES = {'scrapy_stocks.pipelines.BaiduStocksInfoPipeline': 300,
}

Python 网络爬虫笔记11 -- Scrapy 实战相关推荐

  1. Python 网络爬虫笔记10 -- Scrapy 使用入门

    Python 网络爬虫笔记10 – Scrapy 使用入门 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接: ...

  2. Python 网络爬虫笔记9 -- Scrapy爬虫框架

    Python 网络爬虫笔记9 – Scrapy爬虫框架 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Py ...

  3. Python 网络爬虫笔记5 -- Beautiful Soup库实战

    Python 网络爬虫笔记5 – Beautiful Soup库实战 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. ...

  4. Python 网络爬虫笔记2 -- Requests库实战

    Python 网络爬虫笔记2 – Requests库实战 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:P ...

  5. Python 网络爬虫笔记1 -- Requests库

    Python 网络爬虫笔记1 – Requests库 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Pyt ...

  6. Python 网络爬虫笔记8 -- 股票数据定向爬虫

    Python 网络爬虫笔记8 – 股票数据定向爬虫 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Pyth ...

  7. Python 网络爬虫笔记6 -- 正则表达式

    Python 网络爬虫笔记6 – 正则表达式 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Python网 ...

  8. Python 网络爬虫笔记4 -- 信息标记与提取

    Python 网络爬虫笔记4 – 信息标记与提取 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Pytho ...

  9. Python 网络爬虫笔记3 -- Beautiful Soup库

    Python 网络爬虫笔记3 – Beautiful Soup库 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程 ...

最新文章

  1. 【python网络编程】创建TCP/UDP服务器进行客户端/服务器间通信
  2. liferay 定时调度器用法
  3. 开课吧python小课学了有用吗-好消息!今天,审计、会计、税务、财务主管彻底沸腾了……...
  4. 配置并初始化oracle的网络环境
  5. c语言翻转棋ai算法,有没有人懂黑白棋(翻转棋)的核心算法
  6. 将R Markdown文档变成互动体验
  7. 文件名变乱码怎样修复?
  8. 求ReportMachine的OCX教程
  9. 51单片机波特率计算c语言,8051单片机波特率计算公式(配套C语言例程
  10. blender快捷键
  11. 佟年计算机大赛,佟年成电竞高手,老韩带老婆打比赛,solo内网被佟年轻松攻破...
  12. 墨子科技成果是计算机,近年来取得了哪些科技成就_现代史_我爱历史网
  13. 计算机玩游戏特别卡怎么办,电脑玩游戏突然变卡怎么办 玩游戏变卡的解决方法...
  14. linux安装globalsign证书,GlobalSign 普通 OV 代码签名证书提取教程
  15. 创建mysql数据库快照_sql语句大全之创建数据库快照
  16. Linux学习:入门,概述,常用命令,环境安装
  17. python如果获取windows管理员权限(二)
  18. 【IoT】加密与安全:NFC 读写 IC 卡以及密码安全验证
  19. centos7.2系统硬盘分区教程
  20. 爱丁堡公爵奖在燎原双语 | 前行,每一步都是突破

热门文章

  1. summerDao-比mybatis更强大无需映射配置的dao工具
  2. 【JZOJ3636】【BOI2012】Mobile(mobile)
  3. [JZOJ P1311] [DP]邮局设置问题
  4. 基于ISE的设计实现基础
  5. PHP06 PHP操作MySQL
  6. WPF中实现文件夹对话框(OpenFileDialog in WPF)
  7. android onclick事件和ontouch事件发生先后顺序和关联
  8. 第一个 Windows 应用程序
  9. redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题...
  10. SAP的程序用客户端连接正常,用C#连接死活连不上问题的解决