Python网络爬虫与信息提取

(十)"股票数据Scrapy爬虫"(读书笔记

2018-01-24  本文已影响231人  努力奋斗的durian

1."股票数据定向爬虫"实例介绍
2."股票数据定向爬虫"实例编写
3."股票数据定向爬虫"实例优化
4.scrapy单元小结及应用展望
5.python爬虫的总结
6."股票数据Scrapy爬虫"完整的代码

网页链接【Python网络爬虫与信息提取】.MOOC. 北京理工大学
https://www.bilibili.com/video/av9784617/index_55.html#page=60

最近更新:2018-01-24

1."股票数据定向爬虫"实例介绍

1.1功能描述

1.2数据网站的确定

1.3了解scrapy框架结构

2."股票数据定向爬虫"实例编写

2.1步骤建立工程和Spider模板


在cmd中输入命令1,命令2,命令3,并根据提交命令的地址中查找spider文件下的stocks.py文件.,具体如截图:


2.2编写Spider

2.3编写ITEM Pipelines

spider是将已处理了所有的股票信息,以字典的类型封装成items类,给到了ITEM Pipelines模块,


2.3.1配置pipelines.py文件
2.3.2定义对爬取项(Scraped Item)的处理类
2.3.3配置ITEM_PIPELINES选项

因定义了一个新的类,需要scrapy框架能够找到它.

2.4代码编写总结

3."股票数据定向爬虫"实例优化


这里的32是指32个链接

4.scrapy单元小结及应用展望

4.1scrapy的爬虫的单元总结

4.2scrapy的爬虫的地位

具有持续爬取,商业服务,高可靠性的功能和特点


4.3scrapy的爬虫的应用展望


5.python爬虫的总结



6."股票数据Scrapy爬虫"完整的代码

6.1stocks.py页面的代码

import scrapy
import re

class StocksSpider(scrapy.Spider):
    name = 'stocks'
    start_urls = ['http://quote.eastmoney.com/stocklist.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 ="http://gupiao.baidu.com/stock/"+stock+".html"
                yield scrapy.Request(url,callback=self.parse_stock)
            except:
                continue

        
    def parse_stock(self, response):
        infoDict={}
        stockInfo=response.css(".stock-bets")
        name=stockInfo.css(".bets-name").extract()[0]
        keyList=stockInfo.css("dt").extract()
        valueList=stockInfo.css("dd").extract()
        for i in range(len(keyList)):
            key =re.findall(r'>.*</dt>',keyList[i])[0][1:-5]
            try:
                val=re.findall(r'\d+\.?.*</dd>',valueList[i])[0][1:-5]
            except:
                val='--'
            infoDict[key]=val

        infoDict.update(
            {"股票名称":re.findall('\s.*\(',name)[0].split()[0]+ \
             re.findall("\>.*\<",name)[0][1:-1]})
        
        yield infoDict 

6.2pipelines.py页面的代码

class BaidustocksPipeline(object):
    def process_item(self, item, spider):
        return item

    
class BaidustocksInfoPipeline(object):
    def open_spider(self,spider):
        self.f = open("BaiduStockInfo.txt","a")

    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:
            pass

        return item

6.3settings.py页面的代码

ITEM_PIPELINES = {
   'BaiduStocks.pipelines.BaidustocksInfoPipeline': 300,
}
上一篇 下一篇

猜你喜欢

热点阅读