爬虫框架scrapy(1)

一个人想着一个人 提交于 2019-12-20 05:45:02

1.scrapy是为了爬取网站数据,提取结构性数据而编写的应用框架,只需要少量的代码,就能够快速的抓取所需的东西,Twisted异步网络框架,可以加快我们的下载速度
2.流程:装包:pip install scrapy pip install pywin32
创建一个自己的爬虫:打开cmd 用cd 切换到自己想要创建的位置 然后 scrapy startproject Myspider >cd Myspider>scrapy genspider itcat itcast.cn 》tree查看创建好的爬虫 》启动:scrapy crawl itcast

在这里插入图片描述
cmd 上面的一些命令
在这里插入图片描述:网址:http://www.itcast.cn/channel/teacher.shtml
在这里插入图片描述
。。。。。。。。。。。。。。。。。
使用scrapy crawl itcast启动后爬取信息的一些效果 ,如图:
在这里插入图片描述#不想前面出现太多的日志,可以去setting上面设置一下 如图:
在这里插入图片描述这样子就好看一些。。。。。。(其实也不好看)
在这里插入图片描述用yield item 传到piplines.py那里,然后直接在piplines.py(print(item),再去setting.py那里68 行那里开启piplines,如图:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述通过在pipelines.py和setting上设置可以知道,pipeline的权重越小优先级越重,如图:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述如果将pipelines.py的return给注释掉结果会返回none值,如图:
在这里插入图片描述在这里插入图片描述。。。。。。。。。。。。。。。。。。。。。。。。。。。
在这里插入图片描述

itcast的代码

class ItcastSpider(scrapy.Spider):
    name = 'itcast'#爬虫名称
    allowed_domains = ['itcast.cn']#允许爬取的范围
    start_urls = ['http://www.itcast.cn/channel/teacher.shtml']#最开始请求的url地址

    def parse(self, response):
        #处理start_url地址对应的响应
        #jiesao=response.xpath('//li/div/p/text()').extract()
        #print(jiesao)
        div_lsit = response.xpath('//li/div[@class="li_txt"]')
        #content_list = []
        for div in div_lsit:
            item = {}
            #extract_first()和extract()[0]是一样的
            item['名字:']=div.xpath('.//h3/text()').extract_first()
            item['简介:']=div.xpath('.//p/text()').extract()[0]
           # content_list.append(item)
            #print(item)
            #传到pipelines.py
            yield item
        #yield content_list

piplines的代码

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

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
import json
class MyspiderPipeline(object):
    def process_item(self, item, spider):
        with open('teacherline.txt','a')as f:
            json.dump(item,f,ensure_ascii=False,indent=2)
        return item

class MyspiderPipeline(object):
    def process_item(self, item, spider):
        item['hello']="word"
       # print(item)
        #如果注释了下面的return返回的将是none值
        return item

class MyspiderPipeline1(object):
    def process_item(self, item, spider):
        print(item)
        return item

未完持续更新中。。。。。。。。。。。。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!