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

  最近想买两本程序设计的书籍,也就在当当网上面看了下,发现真是太多的书了。所以想着利用爬虫知识爬取下程序设计相关书籍的一些信息。
00_1. 首先是今天所用到的东西
  python 3.5 + scrapy 1.5
00_2.scrapy的相关简单命令
I. 创建爬虫项目之前

# 通过view指令可以下载指定网站,并用默认浏览器打开
    scrapy view http://www.baidu.com
# 通过version可以查看scrapy的版本
    scrapy version
# 通过 startproject创建一个新的项目
    scrapy startproject myproject
# 利用bench 可以创建服务器以最大速度去爬去网页,从而得到爬取的最大速度
    scrapy bench

II. 进入爬虫项目之后,会出现新的命令

# 利用genspider创建爬虫文件。(这里是利用模板创建爬虫文件)
# 一个爬虫项目可以有多个爬虫文件
# 利用 -l 列出这里的模板列表
    scrapy genspider -l

Available templates:
  basic
  crawl
  csvfeed
  xmlfeed

# 利用basic 创建爬虫文件
    scrapy genspider -t basic weisuen baidu.com
# 利用check来测试爬虫文件是否可以
    scrapy check weisuen 

Ran 0 contracts in 0.000s
OK

# 利用 crawl 可以运行爬虫
# 使用--nolog可以控制是否输出日志信息,主要用于看程序是否出现问题
    scrapy crawl weisuen --nolog 
# 利用list显示可以使用的爬虫文件
    scrapy list

01.网页分析
基础网页: http://category.dangdang.com/pg2-cp01.54.06.00.00.00.html
 01_1.提取信息分析   
  右键,检查网页源代码,分别复制我们关心的书籍的信息,在网页源码中检索下,观察我们需要的信息是否能直接从源码中获取。
  可以发现我们想获取的书名价格评论数链接 均为加密,也就是说在网站源码中可以直接获取,这样我们可以直接通过Xpath方法获得即可。(这里也可以使用正则或者其他方法,根据自己喜欢,因为前面博文中已经用正则完成过,这里选择用Xpath完成)
[Python]scrapy爬取当当网书籍相关信息_第1张图片
这里是对应的Xpath式子,可能不是最简洁的,大家可以根据自己能力修改

it["title"] = response.xpath("//p[@class='name']/a[@name='itemlist-title']/text()").extract()
it["Comment_Num"] = response.xpath("//p[@class='search_star_line']/a/text()").extract()
it["price"] = response.xpath("//p[@class='price']/span[@class='search_now_price']/text()").extract()
it["link"] = response.xpath("//p[@class='name']/a[@name='itemlist-title']/@href").extract()

 01_2.网页网址分析
   我们想分析当当网计算机-程序设计目录下的所有图书,就要遍历所有页面(这里大概有一百页),可以复制每一页的网址观察规律,以便构造网址。

第二页:http://category.dangdang.com/pg2-cp01.54.06.00.00.00.html
第三页:http://category.dangdang.com/pg3-cp01.54.06.00.00.00.html
第四页:http://category.dangdang.com/pg4-cp01.54.06.00.00.00.html

  很明显,这里pa代表了页面后面的数字代表了页码。

 02.代码书写
 其实完成了分析阶段,代码的书写阶段就比较简单了。关于scrapy,主要是items、pipelines、和自己创建的爬虫文件部分的书写。关于新建的爬虫文件的书写,这里新建是以basic模板为例。

# -*- coding: utf-8 -*-
import scrapy
from DangDang.items import DangdangItem
from scrapy.http import Request
class DangdSpider(scrapy.Spider):
    name = 'DangD'
    allowed_domains = ['dangdang.com']
    start_urls = ['http://www.dangdang.com/']

    def parse(self, response):
        it = DangdangItem()
        it["title"] = response.xpath("//p[@class='name']/a[@name='itemlist-title']/text()").extract()
        it["Comment_Num"] = response.xpath("//p[@class='search_star_line']/a/text()").extract()
        it["price"] = response.xpath("//p[@class='price']/span[@class='search_now_price']/text()").extract()
        it["link"] = response.xpath("//p[@class='name']/a[@name='itemlist-title']/@href").extract()
        yield it
        for page in range(2, 51):
            url = 'http://category.dangdang.com/pg{}-cp01.54.06.00.00.00.html'.format(page)
            yield Request(url, callback=self.parse)
            break

Ps.具体工程中在pipelines中添加了输出到数据库的内容,根据自己对数据库的了解更改。
  具体完整工程见Github(点击链接),欢迎大家指正相关问题,这也是第一次自助运用scrapy。的确发现scrapy很强大,很简洁,方便大型爬虫项目的书写。

你可能感兴趣的:(Python爬虫)