1、安装

pip install E:\python\lxml-4.2.6-cp36-cp36m-win_amd64.whl

pip install E:\python\Twisted-18.9.0-cp36-cp36m-win_amd64.whl

pip install scrapy

2、爬虫实例

首先我们需要创建一个项目。

scrapy startproject douban_book #

在命令行输入scrapy startproject + [项目名],这样会生成一个scrapy项目。我这个项目的名称是douban_book。大家一看这个名字就知道,我待会要去爬取豆瓣网站图书的内容。

我们来简单看一下该项目的目录结构

我们真正的爬虫程序是写在spiders/bookspider.py文件中的,bookspider.py是我自己创建的文件,其他的文件都是scrapy自己

自动初始化好的。

其中item.py是配置爬虫具体返回的数据,待会我们在具体的例子中会看到如何定义自己需要返回的东西;

pipeline.py是配置具体的通道信息;

settings.py是设置信息,爬虫大部分的配置信息都要在该文件中进行。

首先我们先编写item.py文件,该文件设置爬虫具体的返回数据。

# -*- coding: utf-8 -*-
     
    # Define here the models for your scraped items
    #
    # See documentation in:
    # https://doc.scrapy.org/en/latest/topics/items.html
    import scrapy
    class DoubanBookItem(scrapy.Item):
        # define the fields for your item here like:
        # name = scrapy.Field()
        name = scrapy.Field()
        price = scrapy.Field()
        publisher = scrapy.Field()
        ratings = scrapy.Field()
        edition_year = scrapy.Field()
        author = scrapy.Field()

这里我们需要返回具体某本书的名字,作者,价格,评分等信息,scrapy已经为我们定义好了一个item对象,我们只要使用

Scrapy.Field()这个域就可以定义我们想要返回的字典类型中的“k”值

接下来是最主要的bookspider.py文件了,

import scrapy
    from douban_book.items import DoubanBookItem
    class BookSpider(scrapy.Spider):
        """docstring for BookSpider"""
        name = 'douban-book' #这个名字在后续执行爬虫时用
        allowed_domain = ['douban.com']
        start_urls = ['https://book.douban.com/top250']
        def parse(self, response):
            yield scrapy.Request(response.url, callback = self.parse_page)
            for page in response.xpath('//div[@class="paginator"]/a'):
                link = page.xpath('@href').extract()[0]
                yield scrapy.Request(link, callback = self.parse_page)
       def parse_page(self, response):
            for item in response.xpath('//tr[@class="item"]'):
                book = DoubanBookItem()
                book['name'] = item.xpath('td[2]/div[1]/a/@title').extract()[0]
                book['ratings'] = item.xpath('td[2]/div[2]/span[@class="rating_nums"]/text()').extract()[0]
                # book['ratings'] = item.xpath('td[2]/div[2]/span[2]/text()').extract()[0]
                book_info = item.xpath('td[2]/p[1]/text()').extract()[0]
                book_info_contents = book_info.strip().split(' / ')
                book['author'] = book_info_contents[0]
                book['publisher'] = book_info_contents[1]
                book['edition_year'] = book_info_contents[2]
                book['price'] = book_info_contents[3]
                yield book

这个文件的内容是具体的爬虫信息,先导入我们刚才定义的DoubanBookItem类,下面就要用这个类来具体实例化一个对象以存放返回的信息。我们依然需要定义一个爬虫类BookSpider,在这个类中定义了爬虫的名字“douban-book”,之后定义了一个容许访问的域,就是告诉爬虫可以去爬这个域中的内容。然后定义了爬虫开始的起始网页。

接下来就是定义解析函数parse了,parse函数做了两件事情,一个是发送当前网页(第一页)的请求,另一个是读出所有从第2页开始到最后一页的网络请求,然后向每一个网页发出请求。在parse函数中不具体解析数据,解析数据的工作给了每个请求中的回调函数进行。这个回调函数就是下面定义的parse_page函数。

parse_page函数是我们真正的爬虫数据函数,拿到response之后就对response的每个标签进行解析,然后放在实例化后的book对象中。这里有一个小小的问题,就是某一本书中作者,出版社,时间和价格是在一个string中,因此在拿到这个string后需要用split方法拆开,然后放入book的不同“k”中。最后就是返回book了。

程序完成后我们运行一下,返回到windows的命令行cmd,进入douban_book目录下

然后运行scrapy crawl douban-book -o bookInfo.csv。此处将爬取内容写入csv文件中,当然也可以写入到txt文件中,或是json和MySQL中。我第一次运行这个命令后,返回了403状态码,意思就是网站拒绝了我的请求。这是由于有些网站是不容许进行爬虫的,它发现你是爬虫后会拒绝掉你的请求。解决办法就是在settings.py文件中加入一句话

USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'

这句话的意思就是把我们的请求伪装成一个浏览器以骗过网站的检查,当然伪装有很多办法,这个只是其中的一种。

好了,加入上面那句代码后我们再运行scrapy crawl douban-book -o bookInfo.csv后就会得到我们想要的东西了。这里要说明一下,我是比较喜欢返回csv文件的,一来是因为这个返回结果可以直接在sublime中查看,中文也可以正常显示。

3、注意事项:

(1)需要有HTML的基础知识,理解标签、锚点等概念

(2)scrapy的选择器常用xpath和css,可以通过练习使用这两种选择器收集数据

(3)Scrapy就像是做填空题,涉及到4个文件,

items.py决定爬取哪些项目,

bookspider.py 决定怎么爬

settings.py决定由谁去处理爬取的内容

pipelines.py决定爬取后的内容怎么处理

(4)如果想要调试HTML文档选择器的执行结果,可以在cmd中切换到目录下用shell命令演示结果

Scrapy 实例——爬取豆瓣图书排名top250相关推荐

  1. 第一次练手爬取豆瓣电影排名top250

    从b站看了如何爬取豆瓣电影top250的视频,就是跟着练习实现了,就把代码贴了一下. from bs4 import BeautifulSoup #网页解析,获取数据 import re #正则表达式 ...

  2. 基于Requests的Python爬虫入门实例------爬取豆瓣图书排行榜的前25本图书(小白福利)

    话不多说,先上代码: # -*- coding:utf-8 -*- import sys import requests import lxml from bs4 import BeautifulSo ...

  3. requests 获取div_爬虫系列第五篇 使用requests与BeautifulSoup爬取豆瓣图书Top250

    上一篇我们学习了BeautifulSoup的基本用法,本节我们使用它来爬取豆瓣图书Top250. 一.网页分析 我们爬取的网页的url是https://book.douban.com/top250?i ...

  4. Python3爬取豆瓣图书Top250并写入txt文件当中

    首先简单介绍一下过程 1.解析url 2.获得html文件 3.解析数据 4.写入txt文本(按页写入) 5.上传代码 转载前可以备注一下ytouch的名字 '''爬取豆瓣图书前250名''' #au ...

  5. R语言爬取豆瓣图书Top250

    新手爬虫,使用R中最简单的读取网页,然后获取所需内容所在行进行解析.下面介绍爬取豆瓣图书Top250的案例. 1.首先,我们知道网页规律为:"http://book.douban.com/t ...

  6. Scrapy爬取豆瓣图书详情存入CSV并导入MySQL

    目录 前言 一.新建爬虫工程 二.修改settings.py文件 三.编写items.py 四.编写pipelines.py 五.编写book.py 六.存储到MySQL 七.爬取结果 八.后言 前言 ...

  7. scrapy mysql 豆瓣_利用Scrapy爬取豆瓣图书并保存至Mysql数据库

    Scrapy是一个纯Python语言写的爬虫框架,本次用它来爬取豆瓣图书的数据. 准备工作 没有安装Scrapy的同学需要安装一下,有两种方式安装: 安装了Anaconda的同学直接在命令行输入con ...

  8. 爬取豆瓣图书top250

    爬取豆瓣图书top250 豆瓣网址:https://book.douban.com/top250 豆瓣图书第一页:https://book.douban.com/top250?start=0 豆瓣图书 ...

  9. python爬虫爬取豆瓣图书

    爬取豆瓣图书top250的第一页 我最终爬取的是图书的书名,链接 先要做个说明,如果你是编程高手的话,这边文章你就不用看了,如果你是个python爬虫小白的话,可以看看这篇原创 我将用到的软件是pyc ...

最新文章

  1. 顺序表-插入一个元素x后保持该顺序表L递增有序排序(查找+元素后移插入)
  2. ​基于BCI的现代神经反馈有助于认知增强(二)
  3. java线程池有哪几种,真香系列
  4. 百度资源管理平台 站长工具 批量添加主站域名 子站域名 域名主动推送
  5. Ubuntu16.04 + caffe-ssd + [CPU_ONLY] + KITTI 训练总结
  6. GARFIELD@01-07-2005
  7. python非法语句是_python 如何优雅的处理大量异常语句?
  8. 五初探opengl,变换我们的图形
  9. 图解TCPIP-传输层 UDP报文格式
  10. css写七步诗,兄弟情谊的优美句子
  11. 大数据技术在发展 挑战与机遇并存
  12. 完成一个简单的时间片轮转多道程序内核代码
  13. android 悬浮按钮出现隐藏,Android悬浮窗按钮实现点击并显示/隐藏多功能列表
  14. 2013科目四考试_2013驾考科目四考试流程
  15. 魔兽代理又起风云:网易暴雪腾讯的利益博弈
  16. Axure RP 8 Pro 破解版软件安装包
  17. 天翼云服务器ubuntu20.04安装Mysql记录
  18. VSCode 配置使用 PyLint 语法检查器
  19. jxls对比_久别重逢 QQ影音4.0跟旧版对比更新了什么?
  20. AJ5利用数据源的validation属性对控件进行validation验证

热门文章

  1. Vector3.MoveTowards
  2. 【redash】redash问题整理全(登录、查询)
  3. python按照中文汉字从首字母A-Z排序的方法
  4. Java:程序包不存在解决方案
  5. 华为AC_DHCP配置
  6. sql利用在一条语句中count出不同的条件的值
  7. 什么(危)?面试官考我数据存储的题
  8. python自动化下载_selenium+python自动化--文件下载弹窗处理(PyKeyboard)
  9. 伙伴算法和slab_20多种免费的Slab Serif字体用于徽标和标题
  10. Ubuntu16.04开机蓝屏问题解决