爬虫学习笔记(二)Scrapy

准备

  1. python IDLE 或其他python编译器
  2. 管理员打开cmd安装scrapy:pip install scrapy
  3. 测试网址:①http://quote.eastmoney.com/stock_list.html②https://quotes.sina.cn/search/
  4. 了解scrapy框架
    在这里插入图片描述

步骤

  1. 建立工程和Spider模板
    • 在项目文件夹pycode内,启动cmd命令:scrapy startproject XinLangStocks,项目文件夹中会新增XinLangStocks文件夹。
    • 进入新增的文件夹,启动cmd命令:scrapy genspider stocks xinlang.com,在spiders文件夹内就会生成stocks.py文件。
  2. 修改stocks.py文件(功能:1.对返回页面的处理 2.修改对新增URL爬取请求的处理)
# -*- coding: utf-8 -*-
import scrapy
import re

class StocksSpider(scrapy.Spider):
    name = 'stocks'
    #爬取的起始链接
    start_urls = ['http://quote.eastmoney.com/stock_list.html']

    def parse(self, response):
        #爬取a标签中href的属性内容,即链接
        for href in response.css('a::attr(href)').extract():
            try:
                #选择链接中股票代码字段
                stockCode = re.findall(r'\d{6}',href)[0]
                #生成新的爬取衔接
                url = 'http://stocks.sina.cn/fund/?code='+stockCode
                #生成器逐一请求生成的链接,mata要传递股票代码,接下来会到parse_stock函数处理爬起到的内容
                yield scrapy.Request(url,meta={'stockCode':stockCode},callback=self.parse_stock)
            except:
                continue

    def parse_stock(self,response):
        infoDict = {}
        #提取传递下来的股票代码
        stockCode = response.meta['stockCode']
        #获取最新净值,当class内容含空格时,用'.'句点代替;当省略fund_value时即扩大搜索面积
        priceList = response.css(".j_fund_value.fund_value::text").extract()
        #获取股票名字
        nameList = response.css(".fund_name::text").extract()

        key = '最新净值'
        try:
            val = priceList[0]
        except:
            val = '--'
        #将获取的数据存入infoDict字典
        infoDict[key]=val
        infoDict.update({'股票名称':nameList[0],'股票代码':stockCode})
        yield infoDict
  1. 修改pipelines.py文件(功能:对stocks.py中生成器传过来的item进行处理,同时也可以启动其他一些回调函数)
class XinlangstocksPipeline(object):
    #爬虫启动时的回调函数
    def open_spider(self,spider):
        self.f = open('BaidustocksInfo.txt','w')

    #爬虫关闭时的回调函数
    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:
            pass
        return item
  1. 声明pipelines.py中的class XinlangstocksPipeline(object):
    • 在settings.py文件中找到以下被注释的代码,并把注释去掉
ITEM_PIPELINES = {
    'XinLangStocks.pipelines.XinlangstocksPipeline': 300,
}
  1. 启动Scrapy爬虫:
    • 在XinLangStocks文件夹内启动cmd命令:scrapy crawl stocks
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值