Scrapy实战:爬取http://quotes.toscrape.com网站数据

需要学习的地方:

1.Scrapy框架流程梳理,各文件的用途等

2.在Scrapy框架中使用MongoDB数据库存储数据

3.提取下一页链接,回调自身函数再次获取数据

站点:http://quotes.toscrape.com

该站点网页结构比较简单,需要的数据都在div标签中

操作步骤:

1.创建项目

# scrapy startproject quotetutorial

此时目录结构如下:

2.生成爬虫文件

# cd quotetutorial
# scrapy genspider quotes quotes.toscrape.com # 若是有多个爬虫多次操作该命令即可

3.编辑items.py文件,获取需要输出的数据

import scrapy

class QuoteItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    text = scrapy.Field()
    author = scrapy.Field()
    tags = scrapy.Field()

4.编辑quotes.py文件,爬取网站数据

# -*- coding: utf-8 -*-
import scrapy

from quotetutorial.items import QuoteItem

class QuotesSpider(scrapy.Spider):
    name = ‘quotes‘
    allowed_domains = [‘quotes.toscrape.com‘]
    start_urls = [‘http://quotes.toscrape.com/‘]

    def parse(self, response):
        # print(response.status) # 200
        quotes = response.css(‘.quote‘)
        for quote in quotes:
            item = QuoteItem()

            text = quote.css(‘.text::text‘).extract_first()
            author = quote.css(‘.author::text‘).extract_first()
            tags = quote.css(‘.tags .tag::text‘).extract()

            item[‘text‘] = text
            item[‘author‘] = author
            item[‘tags‘] = tags
            yield item

        next = response.css(‘.pager .next a::attr(href)‘).extract_first()  # 获取下一页的相对链接
        url = response.urljoin(next)  # 生成完整的下一页链接
        yield scrapy.Request(url=url, callback=self.parse)  # 把下一页的链接回调给自身再次请求

5.编写pipelines.py文件,进一步处理item数据,保存到mongodb数据库

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

# Define your item pipelines here
#
# Don‘t forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

# 使用的话需要在settings文件中设置

import pymongo as pymongo
from scrapy.exceptions import DropItem

class TextPipeline(object):
    """对输出的item进行进一步的处理"""

    def __init__(self):
        self.limit = 50

    def process_item(self, item, spider):
        if item[‘text‘]:
            if len(item[‘text‘]) > self.limit:
                item[‘text‘] = item[‘text‘][0:self.limit].rstrip() + ‘......‘
            return item
        else:
            return DropItem(‘Missing Text!‘)

class MongoPipeline(object):
    """把输出的item保存到MongoDB数据库"""

    def __init__(self, mongo_url, mongo_db):
        self.mongo_uri = mongo_url
        self.mongo_db = mongo_db

    @classmethod
    def from_crawler(cls, crawler):
        """从settings文件获取配置信息"""
        return cls(
            mongo_url=crawler.settings.get(‘MONGO_URI‘),
            mongo_db=crawler.settings.get(‘MONGO_DB‘)
        )

    def open_spider(self, spider):
        """初始化mongodb"""
        self.client = pymongo.MongoClient(self.mongo_uri)
        self.db = self.client[self.mongo_db]  # 为啥用[],而不是()

    def process_item(self, item, spider):
        name = item.__class__.__name__  # 获取item的名称用作表名,也就是QuoteItem
        self.db[name].insert(dict(item))  # 为啥要用dict(item)
        return item

    def close_spider(self, spider):
        self.client.close()

6.编辑配置文件,增加mongodb数据库参数,以及使用的pipeline管道参数

ITEM_PIPELINES = {
   # ‘quotetutorial.pipelines.TextPipeline‘: 300,
   ‘quotetutorial.pipelines.MongoPipeline‘: 400,
}

MONGO_URI = ‘localhost‘
MONGO_DB = ‘quotestutorial‘

7.执行程序

# scrapy crawl quotes

8.保存到文件

# scrapy crawl quotes -o quotes.json # 保存成json文件
# scrapy crawl quotes -o quotes.csv # 保存成csv文件
# scrapy crawl quotes -o quotes.xml # 保存成xml文件
# scrapy crawl quotes -o quotes.jl # 保存成jl文件
# scrapy crawl quotes -o quotes.pickle # 保存成pickle文件
# scrapy crawl quotes -o quotes.marshal # 保存成marshal文件
# scrapy crawl quotes -o ftp://user:[email protected]/path/quotes.csv # 生成csv文件保存到远程FTP上

效果:

源码下载地址:https://files.cnblogs.com/files/sanduzxcvbnm/quotetutorial.7z

原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/10292754.html

时间: 2024-10-07 19:25:04

Scrapy实战:爬取http://quotes.toscrape.com网站数据的相关文章

第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号

第三百三十节,web爬虫讲解2-urllib库爬虫-实战爬取搜狗微信公众号 封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import json import random import re import urllib.error def hq_html(hq_url): """ hq_html()封装的爬虫函数,自动启用了用户代理和ip

Scrapy Learning笔记(四)- Scrapy双向爬取

摘要:介绍了使用Scrapy进行双向爬取(对付分类信息网站)的方法. 所谓的双向爬取是指以下这种情况,我要对某个生活分类信息的网站进行数据爬取,譬如要爬取租房信息栏目,我在该栏目的索引页看到如下页面,此时我要爬取该索引页中的每个条目的详细信息(纵向爬取),然后在分页器里跳转到下一页(横向爬取),再爬取第二页中的每个条目的详细信息,如此循环,直至最后一个条目. 这样来定义双向爬取: 水平方向 – 从一个索引页到另一个索引页 纯直方向 – 从一个索引页到条目详情页   在本节中, 提取索引页到下一个

九 web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解

封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import json import random import re import urllib.error def hq_html(hq_url): """ hq_html()封装的爬虫函数,自动启用了用户代理和ip代理 接收一个参数url,要爬取页面的url,返回html源码 "

selenium+scrapy完成爬取特定的知乎界面,比如我爬取的就是搜索“”“某某某东西”

这个地方非常感谢此篇作者的帮助 :http://blog.csdn.net/uselym/article/details/52525025 一.建立一个scrapy框架的爬虫 二.在spider中首先构造登录 二.使用response构造需要获取到的数据 三.在parse函数中返回request请求. 四.在scrapy.Request()中指定url="你需要爬取的界面" 总结:对于知乎的动态界面,scrapy爬虫爬取始终没有selenium模拟上下滑动获取的比较完整,望注意. 原文

Scrapy将爬取的段落整合为字符串

使用Scrapy框架爬取文章的时候,经常会遇到要爬取多个段落的问题,如果这个时候使用的是: text = response.xpath("......").extract() 那么会发现爬取下来的文章是以段落为单位的list,不方便直接展示. 这个时候可以将list转化为字符串,具体语法如下: content='\n'.join(text) 这样就可以把段落用换行符分割开来,方便直接展示. 原文地址:https://www.cnblogs.com/EdenChanIy/p/993647

03_使用scrapy框架爬取豆瓣电影TOP250

前言: 本次项目是使用scrapy框架,爬取豆瓣电影TOP250的相关信息.其中涉及到代理IP,随机UA代理,最后将得到的数据保存到mongoDB中.本次爬取的内容实则不难.主要是熟悉scrapy相关命令以及理解框架各部分的作用. 1.本次目标 爬取豆瓣电影TOP250的信息,将得到的数据保存到mongoDB中. 2.准备工作 需要安装好scrapy以及mongoDB,安装步骤这里不做赘述.(这里最好是先了解scrapy框架各个部分的基本作用和基础知识,这样方便后面的内容的理解.scrapy文档

如何提高scrapy的爬取效率

提高scrapy的爬取效率 增加并发: 默认scrapy开启的并发线程为32个,可以适当进行增加.在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置成了为100. 降低日志级别: 在运行scrapy时,会有大量日志信息的输出,为了减少CPU的使用率.可以设置log输出信息为INFO或者ERROR即可.在配置文件中编写:LOG_LEVEL = ‘INFO’ 禁止cookie: 如果不是真的需要cookie,则在scrapy爬取数据时可以进制coo

爬虫07 /scrapy图片爬取、中间件、selenium在scrapy中的应用、CrawlSpider、分布式、增量式

目录 爬虫07 /scrapy图片爬取.中间件.selenium在scrapy中的应用.CrawlSpider.分布式.增量式 1. scrapy图片的爬取/基于管道类实现 2. 中间件的使用 3. selenium在scrapy中的应用 4. CrawlSpider 5. 分布式 5. 增量式 爬虫07 /scrapy图片爬取.中间件.selenium在scrapy中的应用.CrawlSpider.分布式.增量式 1. scrapy图片的爬取/基于管道类实现 爬取流程: 爬虫类中将解析到的图片

爬取链家任意城市租房数据(北京朝阳)

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time : 2019-08-16 15:56 4 # @Author : Anthony 5 # @Email : [email protected] 6 # @File : 爬取链家任意城市租房数据.py 7 8 9 import requests 10 from lxml import etree 11 import time 12 import xlrd 13 import os