scrapy练习1

1.建立项目:

#建立名为tuto的项目
scrapy startproject tuto

2.进入项目目录:

cd tuto

3.建立域名任务:

#minyan任务名;后面是任务对应的域名
scrapy genspider minyan quotes.toscrape.com

cmd全程记录:

E:\a\scrapy_test>scrapy startproject tuto
New Scrapy project 'tuto', using template directory 'c:\python\python37\lib\site
-packages\scrapy\templates\project', created in:
    E:\a\scrapy_test\tuto

You can start your first spider with:
    cd tuto
    scrapy genspider example example.com

E:\a\scrapy_test>cd tuto

E:\a\scrapy_test\tuto>scrapy genspider minyan quotes.toscrape.com
Created spider 'minyan' using template 'basic' in module:
  tuto.spiders.minyan

E:\a\scrapy_test\tuto>

4.pycharm打开项目,建立用于调试的文件:main.py

用到的函数解析:https://www.cnblogs.com/chenxi188/p/10876690.html

 main.py:

# -*- coding: utf-8 -*-
__author__='pasaulis'
import sys,os
from scrapy.cmdline import execute

#获取到当前目录,添加到环境变量,方便运行cmd不必再去找目录
#.append()添加到环境变量;.dirname()输出不含文件名的路径;.abspath(__file__)得到当前文件的绝对路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

#调用命令运行爬虫scrapy crawl 爬虫名minyan.py中(name的值)
execute(["scrapy","crawl","minyan"])

 查看页面,确定需要解析哪些数据,在items.py里写出:

import scrapy


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

minyan.py:

# -*- coding: utf-8 -*-
import scrapy
from tuto.items import TutoItem #从tuto文件夹下的items.py导入其中的类TutoItem用于创建列表

class MinyanSpider(scrapy.Spider):
    name = 'minyan'
    allowed_domains = ['quotes.toscrape.com']
    start_urls = ['http://quotes.toscrape.com/']

    def parse(self, response):
        quotes=response.css('.quote')
        for quote in quotes:
            item=TutoItem()
            item['text']=quote.css('.text::text').extract_first()
            item['author']=quote.css('.author::text').extract_first()
            item['tags']=quote.css('.keywords::attr(content)').extract_first()
            yield item

        #下一页
        next=response.css('.next > a::attr(href)').extract_first()
        url=response.urljoin(next) #补全网址
        yield scrapy.Request(url=url,callback=self.parse) #请求下一页,并回调自身方法

settings.py把此条改为false

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

运行代码:

在pycharm最下terminal里: scrapy crawl mingyan

或main.py里运行

 

posted @ 2019-05-16 17:26  晨光曦微  阅读(227)  评论(0编辑  收藏  举报