前言
由于之前学了一段时间的plotly,所以我很想写一篇关于数据分析的文章,但是看过很多篇文章的我发现自己进入了一个误区,数据分析并不是这么的简单,它种类复杂,对数学水平要求高,而我之前所做的就算的上是简单的统计。
今天不讲数据分析,但是通过一个CrawlSpider的应用,可以让你的数据分析思维得到提高。这就算的上是站在巨人的肩膀上吸收精华。
案例分析
今天爬取的网站是人人都是产品经理,这是我无意中发现的一个优质网站,里面的文章都是优质文章。爬取的类容有文章标题,发布时间,浏览次数,收藏数,点赞数,以及文章内容。
使用CrawlSpider的重点就是找到url的构成规则,就这个网站而言,
网页的构造规则为:http://www.woshipm.com/tag/+文章类型+/page/+数字 (http://www.woshipm.com/tag/%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90)
文章的构造规则为:http://www.woshipm.com/文章类型/文章编号.html (http://www.woshipm.com/data-analysis/3535097.html)
明确这些后就可以定义规则了。
rules = (
Rule(LinkExtractor(allow='.+/page/\d+'),follow=True),
Rule(LinkExtractor(allow='http://www.woshipm.com/data-analysis/\d+\.html'),callback='parse_item',follow=False)
)
代码实现
woshipm.py
from scrapy.spidersimport CrawlSpider, Rule
from scrapy.linkextractorsimport LinkExtractor
from ..itemsimport DataItem
class WoshipmSpider(CrawlSpider):
name ='woshipm'
allowed_domains = ['woshipm.com']
start_urls = ['http://www.woshipm.com/tag/%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90/page/1']
rules = (
Rule(LinkExtractor(allow='.+/page/\d+'),follow=True),
Rule(LinkExtractor(allow='http://www.woshipm.com/data-analysis/\d+\.html'),callback='parse_item',follow=False)
)
def parse_item(self, response):
title=response.xpath('//h2[@class="article-title"]/text()').get()
ptime=response.xpath('//div/span[@class="post-meta-item"][1]/text()').get()
look=response.xpath('//div/span[@class="post-meta-item"][2]/text()').get()
sc=response.xpath('//div/span[@class="post-meta-item"][3]//span[@class="count"]/text()').get()
dz=response.xpath('//div/span[@class="post-meta-item"][4]//span[@class="count"]/text()').get()
content=''.join(response.xpath('//div[@class="grap"]//text()').getall()).strip()
item=DataItem(title=title,ptime=ptime,look=look,sc=sc,dz=dz,content=content)
yield item
items.py
import scrapy
class DataItem(scrapy.Item):
title=scrapy.Field()
ptime=scrapy.Field()
look=scrapy.Field()
sc=scrapy.Field()
dz=scrapy.Field()
content=scrapy.Field()
pipelines.py
from scrapy.exportersimport JsonLinesItemExporter
class DataPipeline(object):
def __init__(self):
self.fp=open('data.json','wb')
self.exporter=JsonLinesItemExporter(self.fp,ensure_ascii=False,encoding='utf-8')
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
def close_spider(self,spider):
self.fp.close()
效果截图
在此之前我阅读了与数据分析有关的文章,我个人认为数据分析不仅是一种技能可以帮助我们就业,还是一种思维。
数据分析的好处在于它可以通过已有的现象寻找事物背后的规律,从而帮助我们节约决策时间,同时可以让我们更好的生活。比如在就业或者升学方面这是与我们自身是息息相关的,我们通过数据分析可以得出哪些职业正在消失,我们还可以大致推断未来的就业情况。