Scrapy爬取当当网的商品信息存到MySQL数据库

Scrapy 是一款十分强大的爬虫框架,能够快速简单地爬取网页,存到你想要的位置。经过两天的摸索,终于搞定了一个小任务,将当当网的商品信息爬下来存到MySQL数据库里。

一、所需装备

1.python2.7

这个不用多说。。

2.MySQL

百度一下就知道了,我当初折腾了好久才弄懂怎么安装,怎么创建数据库,学一些简单的命令就Ok。

3.Scrapy

说实话,Scrapy的安装配置真的是要人命,不过这里分享一个万金油的方法。通过下面的链接http://pan.baidu.com/s/1pLgySav下载Anaconda,安装好了之后命令行输入:conda install scrapy就ok了。不过这里要提醒一下,这个方法可能没有安好pywin32。我当初就是没有安好,代码写好之后调试折腾了半天。如果pywin32没有安好的话,解决办法也很简单,在命令行输入:pip install pypiwin32就搞定了(默认已经安装好了pip哈,要是没有安好的话自行百度)

二、创建工程

Scrapy默认是不能在IDE中调试的(不过还是有解决方法的),所以工程的创建和调试要在命令行中进行。
创建方式是命令行进入你想创建的位置,然后输入:scrapy startproject balabala
balabala为项目名称哈)。
我在E盘下创建的项目为dangdang, 如图:

然后发现E盘根目录下多了一个dangdang文件,点进去就有如下的文件:

_init_文件是项目初始化文件。
items 文件是我们用来定义数据类型的文件。比如我们想爬取商品名,价格,商品链接,商品评论数,就可以定义name, price, link, commet等数据类型。
middlewares 是下载中间件,在本项目中可以不管。
pipelines 是爬虫项目的管道文件,用来对数据进行加工处理,比如我们保存到数据库就是在这里边进行的。
settings 是爬虫项目的设置文件,我们一般用来设置Cookie, Item_pipelines, 等等,默认情况下是注释掉的,需要人为根据项目需要来修改。

然后通过Genspider命令来创建我们项目自己定义的文件。可以通过scrapy genspider -l
来查看当前可使用的模板:

我们就用

scrapy genspider -t basic mydangdang dangdang.com

命令行来创建一个使用了basic模板的mydangdang爬虫文件,爬虫爬取的域名是dangdang.com。然后就会发现spider文件目录下多了一个mydangdang文件。

三、修改代码

1.items文件

<python>
# -*- coding: utf-8 -*-# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.htmlimport scrapy
class DangdangItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()name = scrapy.Field()price = scrapy.Field()link  = scrapy.Field()commet = scrapy.Field()

定义要爬取的商品名,价格,链接,评论数。

2.spider目录下的mydangdang文件

<python>
# -*- coding: utf-8 -*-
import scrapy
from dangdang.items import DangdangItemclass mydangdangSpider(scrapy.Spider):name = "mydangdang"allowed_domains = ["dangdang.com"]start_urls = ['http://category.dangdang.com/cid4002203.html']def parse(self, response):item = DangdangItem()item["name"] = response.xpath("//a[@name='itemlist-title']/@title").extract()item["price"] = response.xpath("//span[@class='price_n']/text()").extract()item["link"] = response.xpath("//a[@name='itemlist-title']/@href").extract()item["commet"] = response.xpath("//a[@name='itemlist-review']/text()").extract()#print(item["name"])#print(item["price"])#print(item["link"])#print(item["commet"])yield item

其中用到了Xpath表达式,之前我还在傻傻的用re正则表达式,那个很痛苦呀,少了一个小空格,一个小点都不能玩。自从接触到了Xpath我就深深地爱上了它。
比如我想爬取商品名,如下图:

按F12分析源码:

<a title=" 包邮 RICH/莱彩 HD-913 数码摄像机 摄影机 1080P 高清 暂停 家用 DV录像机 照相机  2400万像素 触控屏 时间显示 " href="http://product.dangdang.com/1075438006.html" name="itemlist-title" dd_name="单品标题" ddclick="act=normalResult_title&amp;pos=1075438006_0_1_m" target="_blank"> 包邮 RICH/莱彩 HD-913 数码摄像机 摄影机 1080P 高清 暂停 家用 DV录像机 照相机  2400万像素 触控屏 时间显示 </a>

对应的Xpath 语句就是

item["name"] = response.xpath("//a[@name='itemlist-title']/@title").extract()

//表示获取所有的满足该标签的信息。
a对应源码中的a属性。
@name = ‘itemlist-title’表示name属性为itemlist-title的代码段。
/@title表示找到属性为title对应的值。

最后返回item

3. settings文件的修改

找到ITEM_PIPELINES这一行,做如下修改:

ITEM_PIPELINES = {'dangdang.pipelines.DangdangPipeline': 300,
}

找到COOKIES_ENABLED这一行,做如下修改:

COOKIES_ENABLED = False

这个修改是因为有的网站通过cookies来反爬虫,我们把它设置为False就可以避免爬虫失败。
此外还可以将ROBOTSTXT_OBEY 设置为False,这样就不用遵守爬虫协议。

4. pipelines文件

pipelines文件是关键,它是用来处理返回的item,并将它保存到数据库。

<python>
# -*- 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.htmlimport MySQLdbdef dbHandle():conn = MySQLdb.connect('localhost', '用户名', '自己的密码', '数据库名',charset='utf8')return connclass DangdangPipeline(object):def process_item(self, item, spider):dbObject = dbHandle()cursor = dbObject.cursor()sql ='insert into dangdang(id,name,price,link,commet) values(%s,%s,%s,%s,%s)'for j in range(len(item["name"])):try:cursor.execute(sql,(j+1,item["name"][j],item["price"][j],item["link"][j],item["commet"][j]))dbObject.commit()except Exception ,e:print(e)dbObject.rollback()return item

在这里我已经在MySQL里设置好了数据表,具体设置方法可以百度,最简单的方法是在MySQL可视化软件里设置就OK了。

5. 运行爬虫

我写的爬虫只是个小测试,只爬取第一页,如果想爬取更多的数据可以设置循环自动爬取多少页。本来爬虫就不是个什么好事,所以建议没有特别的需要就不要给服务器增加额外的负担了。
运行爬虫也很简单,命令行输入:

scrapy crawl mydangdang

就OK了。运行结果如下:

是不是感觉离数据分析又近了一步喃。

Scrapy爬取当当网的商品信息存到MySQL数据库相关推荐

  1. python爬虫爬取当当网的商品信息

    python爬虫爬取当当网的商品信息 一.环境搭建 二.简介 三.当当网网页分析 1.分析网页的url规律 2.解析网页html页面 书籍商品html页面解析 其他商品html页面解析 四.代码实现 ...

  2. [Python]scrapy爬取当当网书籍相关信息

    最近想买两本程序设计的书籍,也就在当当网上面看了下,发现真是太多的书了.所以想着利用爬虫知识爬取下程序设计相关书籍的一些信息. 00_1. 首先是今天所用到的东西 python 3.5 + scrap ...

  3. Scrapy爬取当当网图书销售前100

    scrapy爬取当当网图书畅销榜 一.采集任务 爬取当当网图书畅销榜信息,获取热销图书前500相关数据. 二.网页解析 1. 打开当当网,按照图书榜>图书畅销榜 进入当当网图书畅销榜[http: ...

  4. python实战|用scrapy爬取当当网数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:Python进击者 ( 想要学习Python?Pyth ...

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

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

  6. Scrapy爬取重庆安居客二手房并存入mysql数据库(下)

    上篇中我们获取了重庆的一二级区(Scrapy爬取重庆安居客二手房并存入mysql数据库(上)),这一篇我们根据二级区获取相应的二手房信息. 初始化数据库 创建二手房信息数据库表,house表存放二手房 ...

  7. 如何爬取当当网畅销书排行榜信息? requests + pyquery

    ''' 爬取当当网的五星图书排行榜的信息 ''' Max_Page = 3 # 爬取前三页的排行榜信息 import requests from pyquery import PyQuery as p ...

  8. scrapy爬取当当网

    春节已经临近了尾声,也该收收心了.博客好久都没更新了,自己在年前写的爬虫也该"拿"出来了. 本次爬取的目标是当当网,获取当当网所有的书籍信息.采用scrapy+mongodb来采集 ...

  9. scrapy爬取当当网Python图书的部分数据

    1.下载scrapy框架 pip install scrapy 2.在E盘下创建一个文件夹scrapy01,在命令行窗体中进入该文件夹 3.创建项目:scrapy startproject 项目名 s ...

最新文章

  1. 面试官:小伙汁,你画的SpringMVC请求处理过程是从网上抄的吧?
  2. 钉钉扫码登录第三方_在钉钉发布公司重要文件,真的安全吗?
  3. Linq 数据库操作(增删改查)
  4. 说说“开源杀死商业开发工具”
  5. 即时配送的ETA问题之亿级样本特征构造实践
  6. IIS错误代码500.21 ,Nhibernate更新报错,委托的使用。action传参数
  7. 运行opencv保存视频时出现错误的解决方法
  8. java war目录_java war包 路径--解决war包中文件路径问题
  9. resin端口错误问题
  10. 链表查找java_Java 实例 – 链表元素查找
  11. 2019,国产手机生死存亡的一年
  12. Flask 的 template模板 与 jinja2语法
  13. dell笔记本驱动安装失败_声卡驱动安装失败的解决方法
  14. 【基础处理】基于matlab Fxlms算法有源噪声控制系统【含Matlab源码 1394期】
  15. 【elasticsearch】安装合集
  16. Android人脸支付功能,人脸支付是未来吗?盘点安卓人脸支付手机,小米看后很尴尬…...
  17. 「网站收录查询」百度收录批量查询工具主要有哪些?
  18. web前端-----细线表格(table)的制作
  19. 数电发票(全电发票)时代如何查验发票?
  20. 厌学孩子如何进行心理疏导[为本教育]

热门文章

  1. 高德地图地理码和经纬度转化(latlng和latlonpoint)
  2. 修复移动硬盘文件或目录损坏且无法读取
  3. raptor流程图赋值语句_raptor流程图编程
  4. mysql数据库创建 时间,[mysql]设置创建时间为当前时间
  5. 天天都睡不醒?几个方法帮你摆脱“特困生”
  6. mac 钥匙串密码_从命令行获取钥匙串密码
  7. [高数][高昆轮][高等数学上][第二章-导数与微分]03.高阶导数
  8. 计算机毕业设计PHP+安卓基于Android的物流快递app(源码+程序+lw+远程调试)
  9. 银监会拟试点独立法人直销银行
  10. 推荐一下我的个人博客:业余草-www.xttblog.com