1.关于scrapy库的介绍,可以查看其官方文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/

2.安装:pip install scrapy  注意这个库的运行需要pywin32的支持,因此还需要安装pywin32。可以在这个网站上选择合适的版本下载安装:https://sourceforge.net/projects/pywin32/files/pywin32/

3.挖掘当当网商品数据:

首先需要创建一个名为dangdang的爬虫项目,在powershell中进入你项目所在的位置:

D:\Py\myweb>scrapy startproject dangdang

New Scrapy project 'dangdang', using template directory 'd:\\python35\\lib\\site-packages\\scrapy\\templates\\project', created in:

    D:\Python35\myweb\dangdang

You can start your first spider with:

    cd dangdang

    scrapy genspider example example.com

创建好了爬虫项目之后, 需要进入该爬虫项目,然后在爬虫项目中创建一个爬虫,如下所示:

D:\Py\myweb>cd .\dangdang\

D:\Py\myweb\dangdang>scrapy genspider -t basic dangspd dangdang.com

Created spider 'dangspd' using template 'basic' in module:

  Dangdang.spiders.dangspd

随后, 需要编写items.py文件,在该文件中定义好需要爬取的内容, 将items.py文件修改为如下所示:

# -*- coding: utf-8 -*-

# Define here the models for your scraped items

#

# See documentation in:

# http://doc.scrapy.org/en/latest/topics/items.html

import scrapy

class DangdangItem(scrapy.Item):

    # define the fields for your item here like:

    # name = scrapy.Field()

    #商品标题

    title=scrapy.Field()

    #商品评论数

    num=scrapy.Field()

随后,需要编写pipelines.py文件,在pipelines.py文件中,一般会编写一些爬取后数据处理的代码们需要将爬取到的信息依次展现到屏幕上同时保存在本地txt中,将pipelines.py文件修改为如下所示:

# -*- coding: utf-8 -*-

# Define your item pipelines here

#

# Don't forget to add your pipeline to the ITEM_PIPELINES setting

# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html

class DangdangPipeline(object):

    def process_item(self, item, spider):

        #item=dict(item)

        #print(len(item["name"]))

        for j in range(0,len(item["title"])):

            print(j)

            title=item["title"][j]

            num=item["num"][j]

            print("商品名:"+title)

            print("商品评论数:"+num)

            print("--------")

            with open("result.txt",'a') as f:
                f.write(title+"\t"+num +"\n") return item

随后,接下来 还需要编写配置文件settings.py,编写配置文件的目的有两个:

1)、启用刚刚编写的pipelines,因为默认是不启用的。

2)、设置不遵循robots协议爬行,因为该协议对 的爬虫有相关限制,遵循该协议,可能会无法爬取到结果。

可以将配置文件settings.py的robots协议配置部分修改为如下所示,此时值设置为False,代表让爬虫不遵循当当网的robots协议爬行,当然 不要利用这些技术做违法事项。

# Obey robots.txt rules

ROBOTSTXT_OBEY = False

然后, 再将配置文件settings.py的pipelines配置部分设置为如下所示,开启对应的pipelines:

# Configure item pipelines

# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html

ITEM_PIPELINES = {

    'dangdang.pipelines.DangdangPipeline': 300,

}

随后, 需要分析当当网的网页结构,总结出信息提取的规则以及自动爬行的规律。

打开某一个频道页,各页对应的网址如下所示:

http://category.dangdang.com/pg1-cid4002644.html

http://category.dangdang.com/pg2-cid4002644.html

http://category.dangdang.com/pg3-cid4002644.html

……

此时,会发现,网页的格式形如:http://category.dangdang.com/pg[页码]-cid4002644.html

有了该规律之后,可以将页码位置设置为变量,通过for循环就可以构造出一个频道中所有的商品页,也就通过这种方式实现了自动爬取。

然后,再分析商品信息的提取规律。

打开任意一个频道页http://category.dangdang.com/pg1-cid4002644.html,然后可以看到如下界面:

此时 需要提取该页面中所有的商品标题和商品评论信息,将其他无关信息过滤掉。所以, 可以查看该网页源代码,以第一个商品为例进行分析,然后总结出所有商品的提取规律。 可以右键--查看源代码,然后通过ctrl+find快速定位源码中该商品的对应源代码部分,如下所示:

对应源代码复制出来如下所示:

……

<a title=" [当当自营]EGISOO御姬秀橙花润唇膏3g 无色护唇膏 淡化唇纹 水润晶莹 保湿润唇膏 "   class="pic"  href="https://ask.hellobi.com/http://product.dangdang.com/60629118.html#ddclick?act=click&pos=60629118_0_2_m&cat=4002644&key=&qinfo=&pinfo=&minfo=14215_1_48&ninfo=&custid=&permid=20160906025129757347420307757891648&ref=&rcount=&type=&t=1476452492000&searchapi_version=test_ori"  target="_blank" ><img src='http://img3x8.ddimg.cn/33/30/60629118-1_b_2.jpg' alt=' [当当自营]EGISOO御姬秀橙花润唇膏3g 无色护唇膏 淡化唇纹 水润晶莹 保湿润唇膏 ' /></a><p class="price" > <span class="price_n">¥9.90</span></p><p class="name" ><a title=" [当当自营]EGISOO御姬秀橙花润唇膏3g 无色护唇膏 淡化唇纹 水润晶莹 保湿润唇膏 " href="https://ask.hellobi.com/http://product.dangdang.com/60629118.html#ddclick?act=click&pos=60629118_0_2_m&cat=4002644&key=&qinfo=&pinfo=&minfo=14215_1_48&ninfo=&custid=&permid=20160906025129757347420307757891648&ref=&rcount=&type=&t=1476452492000&searchapi_version=test_ori" target="_blank" > [当当自营]EGISOO御姬秀橙花润唇膏3g 无色护唇膏 淡化唇纹 水润晶莹 保湿润唇膏 </a></p><p class="subtitle" > 明星都在用 水润护唇 秋冬换季必备 呵护你的双唇晶莹剔透明媚动人  正品保证 货到付款 </p><p class="star"  style="display:none"><span class="level"><span style="width: 100%;"></span></span><a href="https://ask.hellobi.com/http://comm.dangdang.com/review/reviewlist.php?pid=60629118#ddclick?act=sort_total_review_count_desc&pos=60629118_0_2_m&cat=4002644&key=&qinfo=&pinfo=&minfo=14215_1_48&ninfo=&custid=&permid=20160906025129757347420307757891648&ref=&rcount=&type=&t=1476452492000&searchapi_version=test_ori" target="_blank" name="P_pl">434条评论</a></p>                </div>

……

所以,可以得到提取商品标题和商品评论的Xpath表达式,如下所示:

#提取商品标题

"//a[@class='pic']/@title"

#提取商品评论

"//a[@name='P_pl']/text()"

此时, 已经总结出了信息提取的对应的Xpath表达式,然后 可以编写刚才最开始的时候创建的爬虫文件dangspd.py了, 将爬虫文件编写修改为如下所示:

# -*- coding: utf-8 -*-

import scrapy

import re

from dangdang.items import DangdangItem

from scrapy.http import Request

class DangspdSpider(scrapy.Spider):

    name = "dangspd"

    allowed_domains = ["dangdang.com"]

    start_urls = (

        'http://category.dangdang.com/pg1-cid4002644.html',

    )

    def parse(self, response):

        item=DangdangItem()

        item["title"]=response.xpath("//a[@class='pic']/@title").extract()

        item["num"]=response.xpath("//a[@name='P_pl']/text()").extract()

        yield item

        for i in range(2,101):

            url="http://category.dangdang.com/pg"+str(i)+"-cid4002644.html"

            yield Request(url, callback=self.parse)

这样,就可以实现爬虫的编写了。

随后, 可以进入调试和运行阶段。

进入cmd界面,运行该爬虫,出现如下所示结果,中间结果太长,省略了部分:

D:\Py\myweb\dangdang>scrapy crawl dangspd --nolog

……

43

商品名: WIS水润面膜套装24片 祛痘控油补水保湿淡痘印收缩毛孔面膜贴男女

商品评论数:255条评论

--------

44

商品名: 欧诗漫 水活奇迹系列【水活奇迹珍珠水(清润型)+珍珠水活奇迹保湿凝乳】

商品评论数:0条评论

--------

45

商品名: 【法国进口】雅漾(Avene)活泉恒润保湿精华乳30ml 0064

商品评论数:0条评论

--------

46

商品名: 【法国进口】Avene雅漾敏感肌肤护理净柔洁面摩丝150ml温和泡沫洁面乳洗面奶0655

商品评论数:0条评论

--------

47

商品名: 珍视明中老年护眼贴2盒装 30对60贴  针对中老年用眼问题 缓解眼疲劳

商品评论数:226条评论

而且在本地文件会有一个result.txt文件。里面数据:

Python爬虫库Scrapy入门1--爬取当当网商品数据的更多相关文章

  1. Scrapy实战篇(八)之Scrapy对接selenium爬取京东商城商品数据

    本篇目标:我们以爬取京东商城商品数据为例,展示Scrapy框架对接selenium爬取京东商城商品数据. 背景: 京东商城页面为js动态加载页面,直接使用request请求,无法得到我们想要的商品数据 ...

  2. 0.Python 爬虫之Scrapy入门实践指南(Scrapy基础知识)

    目录 0.0.Scrapy基础 0.1.Scrapy 框架图 0.2.Scrapy主要包括了以下组件: 0.3.Scrapy简单示例如下: 0.4.Scrapy运行流程如下: 0.5.还有什么? 0. ...

  3. Scrapy爬虫(5)爬取当当网图书畅销榜

      本次将会使用Scrapy来爬取当当网的图书畅销榜,其网页截图如下:   我们的爬虫将会把每本书的排名,书名,作者,出版社,价格以及评论数爬取出来,并保存为csv格式的文件.项目的具体创建就不再多讲 ...

  4. python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

    来啦,老弟 我们已经知道怎么使用 Requests 进行各种请求骚操作 也知道了对服务器返回的数据如何使用 正则表达式 来过滤我们想要的内容 ... 那么接下来 我们就使用 requests 和 re ...

  5. Python爬虫学习三------requests+BeautifulSoup爬取简单网页

    第一次第一次用MarkDown来写博客,先试试效果吧! 昨天2018俄罗斯世界杯拉开了大幕,作为一个伪球迷,当然也得为世界杯做出一点贡献啦. 于是今天就编写了一个爬虫程序将腾讯新闻下世界杯专题的相关新 ...

  6. python爬取当当网的书籍信息并保存到csv文件

    python爬取当当网的书籍信息并保存到csv文件 依赖的库: requests #用来获取页面内容 BeautifulSoup #opython3不能安装BeautifulSoup,但可以安装Bea ...

  7. 网络爬虫之定向爬虫:爬取当当网2015年图书销售排行榜信息(Crawler)

    做了个爬虫,爬取当当网--2015年图书销售排行榜 TOP500 爬取的基本思想是:通过浏览网页,列出你所想要获取的信息,然后通过浏览网页的源码和检查(这里用的是chrome)来获相关信息的节点,最后 ...

  8. 基于爬取百合网的数据,用matplotlib生成图表

    爬取百合网的数据链接:http://www.cnblogs.com/YuWeiXiF/p/8439552.html 总共爬了22779条数据.第一次接触matplotlib库,以下代码参考了matpl ...

  9. 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据

    为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...

随机推荐

  1. 操作系统和程序设计语言的API使用的字符编码分析

     1.Java的运行环境中,String是什么编码? 使用java做程序设计语言,字符编码是和jvm相关的,和操作系统无关. java默认的编码是jvm在安装的时候就确定了的,它是根据你的系统的环境确 ...

  2. django常见小问题收集(转)

    1.当我把 DEBUG = True设为False的时候运行 python manage.py runserver 的时候 报错 : CommandError: You must set settin ...

  3. WPF GDI+ bitmap.save 一般性错误

    做水印图片的时候,发现WPF的System.Windows.Shapes类有绘制直线,椭圆等形状.却没有绘字符串的类. 无奈之下又用回GDI+ 发生的GDI+一般性错误初步估计的线程的原因. 在loa ...

  4. php大力力 [049节] php函数implode()

    implode()[1]  函数返回一个由数组元素组合成的字符串. 注释:implode() 函数接受两种参数顺序.但是由于历史原因,explode() 是不行的,您必须保证 separator 参数 ...

  5. NOIP 考前 暴力练习

    BZOJ 1028 暴力枚举听的那张牌,和那个多余的两张牌,其余的mod3后模拟就可以了 #include <cstdio> ; int n,m,a[Maxn],b[Maxn],cnt,A ...

  6. BZOJ 3270 && BZOJ 1778 (期望DP && 高斯消元)

    BZOJ 3270 :设置状态为Id(x,y)表示一人在x,一人在y这个状态的概率. 所以总共有n^2种状态. p[i]表示留在该点的概率,Out[i]=(1-p[i])/Degree[i]表示离开该 ...

  7. SpringMvc+Spring+Mybatis的jar包依赖关系图

  8. 浅谈js的事件冒泡机制

    很多人都听说过,js的事件冒泡机制,其实,这个说法还是比较生动形象的,就是一个水泡在水底下,冒泡到水面的过程. 那js的事件冒泡机制呢,就是一个DOM树,一级一级向上冒的过程,最终是到document ...

  9. Unity3D教程:茄子童萌會

    http://s.epb.idv.tw/han-shi-ku/unity Unity 0000 Unity3D學習之路 - C#學習筆記(一) 0001 Unity3D學習之路 - C#學習筆記(二) ...

  10. Caffe 源碼閱讀(五) Solver.cpp

    1.Solver类两个构造函数 Solver(const SolverParameter& param) Solver(const string& param_file) 初始化两个类 ...