精华内容
下载资源
问答
  • scrapy实例

    2019-07-07 11:22:09
    1.先进入配置好的scrapy环境变量,用命令行创建scrapy项目 2.scrapy startproject 项目名,进入项目目录 3.scrapy genspider 爬虫名 所要爬取网页的根url 4.pycharm打开爬虫项目 5.更改settings.py文件中的...

    scrapy爬取http://www.cqn.com.cn/ms/node_1460.htm

    1.先进入配置好的scrapy环境变量,用命令行创建scrapy项目

    2.scrapy startproject 项目名,进入项目目录

    3.scrapy genspider 爬虫名 所要爬取网页的根url

    4.pycharm打开爬虫项目

    5.更改settings.py文件中的

    ROBOTSTXT_OBEY = False
    

    6.在 爬虫名.py文件中编辑爬虫的逻辑

    start_urls放入所要爬取文件的起始网页的url

    定义解析response函数,函数操作的对象就是对url爬取过后的response结果

    一般对response用xpath规则进行解析

    xpath语法教程 http://www.w3school.com.cn/xpath/index.asp

    根据chrome浏览器->更多工具(L)->开发者工具(D)进入爬取url的Elements,通过对想要的元素经行分析定位写入函数

    一般爬取url中显示的列表->找到url的Elements中的ul标签下的li生成一个包含li的list对象,对list进行for循环找到li中的想要信息

    一般爬取url中显示的表格->找到url的Elements中的table标签下的tr生成一个包含所有tr的list对象,对list进行for循环找到tr标签下的td,再生成一个包含所有td的list,对list在进行一次for循环就可以找到td内的具体内容。爬取table需要2层for循环嵌套。

    我觉得在爬取table表格是先生成一个空列表,在最内层for循环将爬取到的内容添加到空列表中,同时记录tr列表的长度和td列表的长度,这样容易对table表格进行还原,对具体数据进行定位。

     

    对于爬取具体标签中的文本会有爬取不完全的情况,所以也需要先生成一个p标签下所有文本的list对象,对list进行for循环遍历,将每一段文本拼接在一起后返回。

    response.xpath('//标签类型[@标签的一个属性=“属性具体的名字”]')  适合定位到拥有唯一属性名字的标签

    .//表示从根目录下所有节点  

    /表示当前节点的下一层节点

    一般使用.// + 具体属性名进行定位

     

    如果需要从当前url中跳转到url中包含的url需要用 yield response.follow(跳转的url,self.解析跳转url的函数名)

    跳转的url不需要拼接成完成的url,只需要是从当前url中通过xpath语法定位到的a标签的href属性内容

    一般爬虫会涉及的到爬取下一页的问题,可以将下一页的url做为一个变量,通过对这个变量进行if判断是否为空来判断是否存在下一页,如果不为空,就通过yield response.follow(跳转的url,self.解析跳转url的函数名)进行下一页的爬取。下一页如果为空爬取会报错,建议加一个异常处理。

     

    一般爬取到的table表格内容需要生成csv文件好用来进行数据分析。

    table表格中的数据都添加到了content列表中,先生成文件名,然后对csv文件进行写入。

    csv文件每次要按行写入,所以每次写入数据的长度和爬取table表格中的tr,td两个列表的长度有关系。

     

    import csv
    import requests
    import scrapy
    
    
    from CQN.items import CqnItem
    
    class CqnSpider(scrapy.Spider):
        name = 'cqn'
        allowed_domains = ['cqn.com.cn']
        start_urls = ['http://www.cqn.com.cn/ms/node_1460.htm']
    
        #def start_requests(self):
        #    url = ['http://www.cqn.com.cn/ms/node_1460.htm']
        #    yield scrapy.Request(url,callback=self.parse)
    
        def parse(self, response):
    
            next_list = response.xpath('.//span[@class="curr"]/following::*')[0]
    
            news_list = response.xpath('//dd[@class="cont_l"]/ul/li')
            for news in news_list:
                item = CqnItem()
                time = news.xpath(".//span/text()").extract_first()
                headline = news.xpath(".//a/text()").extract_first()
                link = news.xpath(".//a/@href")[0]
                yield response.follow(link,self.parse_content)
    
            if next_list:
                try:
                    yield response.follow(next_list, self.parse)
                except ValueError:
                    print("---------------------------------------------------------")
                else:
                    print(next_list)
    
    
    
    
        def parse_content(self,response):
            tables = response.xpath('.//table')
            tag=1
            for table in tables:
                content = []
                trs = table.xpath('.//tr')
                num = (int(len(trs)) - 1)
                for tr in trs:
                    tds = tr.xpath('.//td')
                    lens = (int(len(tds)))
                    if lens==1:
                        tag=0
                    for td in tds:
                        text = ""
                        for p in td.xpath('.//p//text()'):
                            text = text + p.extract().strip()
                        content.append(text)
    
                if(len(content)>10):
                    if tag == 1:
                        x = response.xpath('.//div[@class="Detail_Title"]/h1/text()').extract_first()
                        y = str(x).split("\r\n")
                        z = y[1].split(" ")
                        content.insert(0, z[8])
    
                    title = content[0] + '.csv'
                    with open(title,'w',encoding='utf-8',newline='') as csvfile:
                        writer = csv.writer(csvfile)
                        writer.writerow(content[1:(lens+1)])
                        for i in range(num):
                            writer.writerow(content[(lens*(i+1)+1):(lens*(i+2)+1)])
    

     

    展开全文
  • Scrapy实例

    2019-03-01 14:36:34
    新浪新闻逐页爬取标题和链接并保存到...class itemSpider(scrapy.Spider): name = 'itemSpider' start_urls = ['http://mil.news.sina.com.cn/roll/index.d.html?cid=57918'] def parse(self, response): li=...

    新浪新闻逐页爬取标题和链接并保存到txt中

    
    class itemSpider(scrapy.Spider):
        name = 'itemSpider'
        start_urls = ['http://mil.news.sina.com.cn/roll/index.d.html?cid=57918']
    
        def parse(self, response):
            li=response.css('.fixList .linkNews li')
            for l in li:
                link = l.css('a::attr(href)').extract_first()  # 提取首页所有url
                title=l.css('a::text').extract_first()#提取title
                with open('xinwen.txt', "a+") as f:  # “a+”以追加的形式
                                f.write(title)
                                f.write('\n')  # ‘\n’ 表示换行
                                f.write('链接:' + link)
                                f.write('\n-------\n')
                                f.close()
            
            next_page = response.css('.pagebox_next a::attr(href)').extract_first()
            if next_page is not None:
                print(next_page)
                next_page = response.urljoin(next_page)
                yield scrapy.Request(next_page, callback=self.parse)
    
    

    逐页爬取名言

    # class itemSpider(scrapy.Spider):
    #     name = 'itemSpider'
    #     start_urls = ['http://lab.scrapyd.cn']
    #     def parse(self, response):
    #         mingyan = response.css('div.quote')  # 提取首页所有名言,保存至变量mingyan
    #
    #         for v in mingyan:  # 循环获取每一条名言里面的:名言内容、作者、标签
    #
    #             text = v.css('.text::text').extract_first()  # 提取名言
    #             autor = v.css('.author::text').extract_first()  # 提取作者
    #             tags = v.css('.tags .tag::text').extract()  # 提取标签
    #             tags = ','.join(tags)  # 数组转换为字符串
    #
    #             """
    #             接下来进行写文件操作,每个名人的名言储存在一个txt文档里面
    #             """
    #             fileName = '%s-语录.txt' % autor  # 定义文件名,如:木心-语录.txt
    #
    #             with open(fileName, "a+") as f:  # 不同人的名言保存在不同的txt文档,“a+”以追加的形式
    #                 f.write(text)
    #                 f.write('\n')  # ‘\n’ 表示换行
    #                 f.write('标签:' + tags)
    #                 f.write('\n-------\n')
    #                 f.close()
    #         next_page = response.css('li.next a::attr(href)').extract_first()
    #         if next_page is not None:
    #             next_page = response.urljoin(next_page)
    #             yield scrapy.Request(next_page, callback=self.parse)
    #
    
    

    按照传来的参数爬取名言

    import scrapy
    
    
    class ArgsspiderSpider(scrapy.Spider):
    
        name = "argsSpider"
    
        def start_requests(self):
            url = 'http://lab.scrapyd.cn/'
            tag = getattr(self, 'tag', None)  # 获取tag值,也就是爬取时传过来的参数
            if tag is not None:  # 判断是否存在tag,若存在,重新构造url
                url = url + 'tag/' + tag  # 构造url若tag=爱情,url= "http://lab.scrapyd.cn/tag/爱情"
            yield scrapy.Request(url, self.parse)  # 发送请求爬取参数内容
    
        """
        以下内容为上一讲知识,若不清楚具体细节,请查看上一讲!
        """
    
        def parse(self, response):
            mingyan = response.css('div.quote')
            for v in mingyan:
                text = v.css('.text::text').extract_first()
                tags = v.css('.tags .tag::text').extract()
                tags = ','.join(tags)
                fileName = '%s-语录.txt' % tags
                with open(fileName, "a+") as f:
                    f.write(text)
                    f.write('\n')
                    f.write('标签:' + tags)
                    f.write('\n-------\n')
                    f.close()
            next_page = response.css('li.next a::attr(href)').extract_first()
            if next_page is not None:
                next_page = response.urljoin(next_page)
                yield scrapy.Request(next_page, callback=self.parse)
    

    代码写好之后,那我们要如何传参呢?如何运行呢?比如我们要爬取标签:爱情,我们可以这样:

    scrapy crawl argsSpider -a tag=爱情
    

    css用法

    http://www.scrapyd.cn/doc/185.html
    在这里插入图片描述

    展开全文
  • 主要介绍了Python爬虫框架Scrapy实例代码,需要的朋友可以参考下
  • Python Scrapy实例之NumKr

    2016-09-28 23:21:53
    Scrapy实例

    Scrapy实例(PhantomJs)

    1. 新建Scrapy项目

    • 在工作空间文件夹中打开cmd命令行:Scrapy startproject Kr
    • 此时Scrapy将在空间中创建kr项目文件夹

    2. 配置设置文件

    • 需配置的Settings:
      1. ROBOTSTXT_OBEY = True(默认为True,无视机器人协议可改为False)
      2. DOWNLOADER_MIDDLEWARES = {‘numkr.middlewares.SelenuimMiddlewares’: 543}
        (引入SelenuimMiddlewares)
      3. ITEM_PIPELINES = {‘numkr.pipelines.NumkrPipeline’: 300}
        (定义NumkrPipeline)
    展开全文
  • 原标题:Python 爬虫:Scrapy 实例(一)1、创建Scrapy项目似乎所有的框架,开始的第一步都是从创建项目开始的,Scrapy也不例外。在这之前要说明的是Scrapy项目的创建、配置、运行……默认都是在终端下操作的。不要...

    原标题:Python 爬虫:Scrapy 实例(一)

    1、创建Scrapy项目

    似乎所有的框架,开始的第一步都是从创建项目开始的,Scrapy也不例外。在这之前要说明的是Scrapy项目的创建、配置、运行……默认都是在终端下操作的。不要觉得很难,其实它真的非常简单,做填空题而已。如果实在是无法接受,也可以花点心思配置好Eclipse,在这个万能IDE下操作。推荐还是在终端操作比较好,虽然开始可能因为不熟悉而出现很多错误,错多了,通过排错印象深刻了,也就自然学会了。打开Putty连接到Linux,开始创建Scrapy项目。执行命令:

    cd

    cd code/scrapy/

    scrapy startproject todayMovie

    tree todayMovie

    执行结果如图1所示。

    图1 创建todayMovie项目

    tree命令将以树形结构显示文件目录结构。tree命令默认情况下是没有安装的,可以执行命令apt-get install tree来安装这个命令。

    这里可以很清楚地看到todayMovie目录下的所有子文件和子目录。至此Scrapy项目todayMovie基本上完成了。按照Scrapy的提示信息,可以通过Scrapy的Spider基础模版顺便建立一个基础的。相当于把填空题打印到试卷上,等待填空了。当然,也可以不用Scrapy命令建立基础,如果非要体验一下DIY也是可以的。这里我们还是怎么简单怎么来吧,按照提示信息,在该终端中执行命令:

    cd todayMovie

    scrapy genspider wuHanMovieSpider mtime.com

    执行结果如图2所示。

    图2 创建基础爬虫

    至此,一个最基本的项目已经建立完毕了,它包含了一个Scrapy所需的基础文件。到这一步可以说填空题已准备完毕,后面的工作就纯粹是填空了。图2中第一行文字scrapy genspider是一个命令,也是Scrapy最常用的几个命令之一,它的使用方法如图3所示。

    图3 scrapy genspider命令帮助

    因此,刚才的命令意思是使用scrapy genspider命令创建一个名字为wuHanMovieSpider的爬虫脚本。这个脚本搜索的域为mtime.com。

    2、Scrapy文件介绍

    Scrapy项目的所有文件都已经到位了,如图2所示,下面来看看各个文件的作用。首先最顶层的那个todayMovie文件夹是项目名,这个没什么好说的。

    在第二层中是一个与项目同名的文件夹todayMovie和一个文件scrapy.cfg,这里与项目同名的文件夹todayMovie是模块(也可以叫做包的),所有的项目代码都在这个模块(文件夹或者叫包)内添加。而scrapy.cfg文件,顾名思义它是整个Scrapy项目的配置文件。来看看这个文件里有些什么。Scrapy.cfg文件内容如下:

    1 # Automatically created by: scrapy startproject

    2 #

    3 # For more information about the [deploy] section see:

    4 # http://doc.scrapy.org/en/latest/topics/scrapyd.html

    5

    6 [settings]

    7 default = todayMovie.settings

    8

    9 [deploy]

    10 #url = http://localhost:6800/

    11 project = todayMovie

    除去以“#”为开头的注释行,整个文件只声明了两件事:一是定义默认设置文件的位置为todayMovie模块下的settings文件,二是定义项目名称为todayMovie。

    在第三层中有6个文件和一个文件夹(实际上这也是个模块)。看起来很多。实际上有用的也就3个文件,分别是items.py、pipelines.py、settings.py。其他的3个文件中,以pyc结尾的是同名程序编译得到的字节码文件,settings.pyc是settings.py的字节码文件,__init__.pyc是__init__.py的字节码文件。据说用来加快程序的运行速度,可以忽视。至于__init__.py文件,它是个空文件,里面什么都没有。在此处唯一的作用就是将它的上级目录变成了一个模块。也就是说第二层的todayMovie模块下,如果没有__init__.py文件。那么todayMovie就只是一个单纯的文件夹。在任何一个目录下添加一个空的__init__.py文件,就会将该文件夹模块化,可以供导入使用。

    有用的这3个文件中。settings.py是上层目录中scrapy.cfg定义的设置文件。settings.py的内容如下:

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

    2

    3 # Scrapy settings for todayMovie project

    4 #

    5 # For simplicity, this file contains only settings considered importantor

    6 # commonly used. You can find more settings consulting thedocumentation:

    7 #

    8 # https://doc.scrapy.org/en/latest/topics/settings.html

    9 # https://doc.scrapy.org/en/latest/topics/downloader-middleware.html

    10 # https://doc.scrapy.org/en/latest/topics/spider-middleware.html

    11

    12 BOT_NAME = 'todayMovie'

    13

    14 SPIDER_MODULES = ['todayMovie.spiders']

    15 NEWSPIDER_MODULE = 'todayMovie.spiders'

    16

    17

    18 # Crawl responsibly by identifying yourself (and your website) on the

    user-agent

    19 #USER_AGENT = 'todayMovie (+http://www.yourdomain.com)'

    20

    21 # Obey robots.txt rules

    22 ROBOTSTXT_OBEY = True

    items.py文件的作用是定义爬虫最终需要哪些项,items.py的内容如下:

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

    2

    3 # Define here the models for your scraped items

    4 #

    5 # See documentation in:

    6 # http://doc.scrapy.org/en/latest/topics/items.html

    7

    8 import scrapy

    9

    10

    11 class TodaymovieItem(scrapy.Item):

    12 # define the fields for your item here like:

    13 # name = scrapy.Field

    14 pass

    pipelines.py文件的作用是扫尾。Scrapy爬虫爬取了网页中的内容后,这些内容怎么处理就取决于pipelines.py如何设置了。pipeliens.py文件内容如下:

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

    2

    3 # Define your item pipelines here

    4 #

    5 # Don't forget to add your pipeline to the ITEM_PIPELINES setting

    6 # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html

    7

    8

    9 class TodaymoviePipeline(object):

    10 def process_item(self, item, spider):

    11 return item

    第二层中还有一个spiders的文件夹。仔细看一下,在该目录下也有个__init__.py文件,说明这个文件夹也是一个模块。在该模块下是本项目中所有的爬虫文件。

    第三层中有3个文件,__init__.py、__init__.pyc、wuHanMovieSpider.py。前两个文件刚才已经介绍过了,基本不起作用。wuHanMovieSpider.py文件是刚才用scrapy genspider命令创建的爬虫文件。wuHanMovieSpider.py文件内容如下:

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

    2 import scrapy

    3

    4

    5 class WuhanmoviespiderSpider(scrapy.Spider):

    6 name = "wuHanMovieSpider"

    7 allowed_domains = ["mtime.com"]

    8 start_urls = (

    9 'http://www.mtime.com/',

    10 )

    11

    12 def parse(self, response):

    13 pass

    在本次的爬虫项目示例中,需要修改、填空的只有4个文件,它们分别是items.py、settings.py、pipelines.py、wuHanMovieSpider.py。其中items.py决定爬取哪些项目,wuHanMovieSpider.py决定怎么爬,settings.py决定由谁去处理爬取的内容,pipelines.py决定爬取后的内容怎样处理。

    3、Scrapy爬虫编写

    My first scrapy crawl怎么简单,怎么清楚就怎么来。这个爬虫只爬取当日电影名字,那我们只需要在网页中采集这一项即可。

    (1)选择爬取的项目items.py

    修改items.py文件如下:

    1 # -*- coding: untf-8 -*-

    2

    3 # Define here the models for your scraped items

    4 #

    5 # See documentation in:

    6 # http://doc.scrapy.org/en/latest/topics/items.html

    7

    8 import scrapy

    9

    10

    11 class TodaymovieItem(scrapy.Item):

    12 # define the fields for your item here like:

    13 # name = scrapy.Field

    14 #pass

    15 movieTitleCn = scrapy.Field #影片中文名

    16 movieTitleEn = scrapy.Field #影片英文名

    17 director = scrapy.Field #导演

    18 runtime = scrapy.Field #电影时长

    由于中严格的格式检查。中最常见的异常Indentati会经常出现。如果使用的编辑器是vi或者vim,强烈建议修改vi的全局配置文件/etc/vim/vimrc,将所有的4个空格变成tab。

    与最初的items.py比较一下,修改后的文件只是按照原文的提示添加了需要爬取的项目,然后将类结尾的pass去掉了。这个类是继承与Scrapy的Iteam类,它没有重载类的__init__的解析,没有定义新的类,只定义了类成员。

    (2)定义怎样爬取wuHanMovieSpider.py

    修改spiders/wuHanMovieSpider.py,内容如下:

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

    2 import scrapy

    3 from todayMovie.items import TodaymovieItem

    4 import re

    5

    6

    7 class WuhanmoviespiderSpider(scrapy.Spider):

    8 name = "wuHanMovieSpider"

    9 allowed_domains = ["mtime.com"]

    10 start_urls = [

    11 'http://theater.mtime.com/China_Hubei_Province_Wuhan_Wuchang/4316/',

    12 ] #这个是武汉汉街万达影院的主页

    13

    14

    15 def parse(self, response):

    16 selector =response.xpath('/html/body/[3]/text')[0].extract

    17 moviesStr = re.search('"movies":[.*?]', selector).group

    18 moviesList = re.findall('{.*?}', moviesStr)

    19 items = []

    20 for movie in moviesList:

    21 mDic = eval(movie)

    22 item = TodaymovieItem

    23 item['movieTitleCn'] = mDic.get('movieTitleCn')

    24 item['movieTitleEn'] = mDic.get('movieTitleEn')

    25 item['director'] = mDic.get('director')

    26 item['runtime'] = mDic.get('runtime')

    27 items.append(item)

    28 return items

    在这个文件中,首先导入了scrapy模块,然后从模块(包)todayMovie中的items文件中导入了TodaymovieItem类,也就是刚才定义需要爬行内容的那个类。WuhanmovieSpider是一个自定义的类,它是由scrapy genspider命令自动生成的。这个自定义类继承于scrapy.Spider类。第8行的name定义的是名。第9行的allowed_domains定义的是域范围,也就是说该只能在这个域内爬行。第11行的start_urls定义的是爬行的网页,这个只需要爬行一个网页,所以在这里start_urls可以是一个元组类型。如果需要爬行多个网页,最好使用列表类型,以便于随时在后面添加需要爬行的网页。

    类中的parse函数需要参数response,这个response就是请求网页后返回的数据。至于怎么从response中选取所需的内容,一般采取两种方法,一是直接在网页上查看网页源代码,二是自己写个Python 3程序使用urllib.request将网页返回的内容写入到文本文件中,再慢慢地查询。

    打开Chrome浏览器,在地址栏输入爬取网页的地址,打开网页。

    同一网页内的同一项目格式基本上都是相同的,即使略有不同,也可以通过增加挑选条件将所需的数据全部放入选择器。在网页中右击空白处,在弹出菜单中选择“查看网页源代码”。

    打开源代码网页,按Ctrl+F组合键,在查找框中输入“寻梦环游记”后按回车键,查找结果如图4所示。

    图4 查找关键词

    整个源代码网页只有一个查询结果,那就是它了。而且很幸运的是,所有的电影信息都在一起,是以json格式返回的。这种格式可以很容易地转换成字典格式获取数据(也可以直接json模块获取数据)。

    仔细看看怎样才能得到这个“字典”(json格式的字符串)呢?如果嵌套的标签比较多,可以用XPath嵌套搜索的方式来逐步。这个页面的源码不算复杂,直接Tag标签后一个一个的数标签就可以了。Json字符串包含在标签内,数一下标签的位置,在脚本中执行语句:

    16 selector = response.xpath('/html/body/[3]/text')[0].extract( )

    意思是选择页面代码中html标签下的body标签下的第4个标签。然后获取这个标签的所有文本,并释放出来。选择器的选择到底对不对呢?可以验证一下,在该项目的任意一级目录下,执行命令:

    scrapy shell

    http://theater.mtime.com/China_Hubei_Province_Wuhan_Wuchang/4316/

    执行结果如图5所示。

    图5 scrapy shell

    response后面的200是网页返回代码,200代表获取数据正常返回,如果出现其他的数字,那就得仔细检查代码了。现在可以放心地验证了,执行命令:

    selector =

    response.xpath('/html/body/[3]/text')

    [0].extract

    print(selector)

    执行结果如图6所示。

    图6 验证选择器

    看来选择器的选择没问题。再回头看看wuHanMovieSpider.py中的parse就很容易理解了。代码第17、18行先用re模块将json字符串从选择器的结果中过滤出来。第19行定义了一个items的空列表,这里定义items的列表是因为返回的item不止一个,所以只能让item以列表的形式返回。第22行item初始化为一个TodaymoizeItem的类,这个类是从todayMovie.items中初始化过来的。第21行将json字符串转换成了一个字典格式。第23~26行将已经初始化类item中的movieName项赋值。第27行将item追加到items列表中去。最后return items,注意这里返回的是items,不是item。

    (3)保存爬取的结果pipelines.py

    修改pipelines.py,内容如下:

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

    2

    3 # Define your item pipelines here

    4 #

    5 # Don't forget to add your pipeline to the ITEM_PIPELINES setting

    6 # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html

    7

    8 import codecs

    9 import time

    10

    11 class TodaymoviePipeline(object):

    12 def process_item(self, item, spider):

    13 today = time.strftime('%Y-%m-%d', time.localtime)

    14 fileName = '武汉汉街万达广场店' + today + '.txt'

    15 with codecs.open(fileName, 'a+', 'utf-8') as fp:

    16 fp.write('%s %s %s %s rn'

    17 %(item['movieTitleCn'],

    18 item['movieTitleEn'],

    19 item['director'],

    20 item['runtime']))

    21 # return item

    这个脚本没什么可说的,比较简单。就是把当日的年月日抽取出来当成文件名的一部分。然后把wuHanMovieSpider.py中获取项的内容输入到该文件中。这个脚本中只需要注意两点。第一,open创建文件时必须是以追加的形式创建,也就是说open的第二个参数必须是a,也就是文件写入的追加模式append。。因为wuHanMovieSpider.py返回的是一个item列表items,这里的写入文件只能一个一个item地写入。如果open的第二个参数是写入模式write,造成的后果就是先擦除前面写入的内容,再写入新内容,一直循环到items列表结束,最终的结果就是文件里只保存了最后一个item的内容。第二是保存文件中的内容如果含有汉字就必须转换成utf8码。汉字的unicode码保存到文件中正常人类都是无法识别的,所以还是转换成正常人类能识别的utf8吧。

    到了这一步,这个Scrapy爬虫基本上完成了。回到scrapy.cfg文件的同级目录下(实际上只要是在todayMovie项目下的任意目录中执行都行,之所以在这一级目录执行纯粹是为了美观而已),执行命令:

    scrapy crawl wuHanMovieSpider

    结果却什么都没有?为什么呢?

    (4)分派任务的settings.py

    先看看settings.py的初始。它仅指定了Spider的位置。再看看写好的Spider的开头,它导入了items.py作为模块,也就是说现在Scrapy已经知道了爬取哪些项目,怎样爬取内容,而pipelines说明了最终的爬取结果怎样处理。唯一不知道的就是由谁来处理这个爬行结果,这时候就该setting.py出点力气了。setting.py的最终如下:

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

    2

    3 # Scrapy settings for todayMovie project

    4 #

    5 # For simplicity, this file contains only the most important settingsby

    6 # default. All the other settings are documented here:

    7 #

    8 # http://doc.scrapy.org/en/latest/topics/settings.html

    9 #

    10

    11 BOT_NAME = 'todayMovie'

    12

    13 SPIDER_MODULES = ['todayMovie.spiders']

    14 NEWSPIDER_MODULE = 'todayMovie.spiders'

    15

    16 # Crawl responsibly by identifying yourself (and your website) on theuser-a gent

    17 #USER_AGENT = 'todayMovie (+http://www.yourdomain.com)'

    18

    19 ### user define

    20 ITEM_PIPELINES = {'todayMovie.pipelines.TodaymoviePipeline':300}

    这跟初始的settings.py相比,就是在最后添加了一行ITEM_PIPELINES。它告诉Scrapy最终的结果是由todayMovie模块中pipelines模块的TodaymoviePipeline类来处理。ITEM_PIPELINES是一个字典,字典的key用来处理结果的类,字典的value是这个类执行的顺序。这里只有一种处理方式,value填多少都没问题。如果需要多种处理结果的方法,那就要确立顺序了。数字越小的越先被执行。

    现在可以测试这个Scrapy爬虫了,还是执行命令:

    scrapy crawl wuHanMovieSpider

    ls

    cat *.txt

    执行结果如图7所示。

    图7 Scrapy爬虫结果

    这个最简单的爬虫就到这里了。从这个项目可以看出,Scrapy爬虫只需要顺着思路照章填空就可以了。如果需要的项比较多,获取内容的网页源比较复杂或者不规范,可能会稍微麻烦点,但处理起来基本上都是大同小异的。与re爬虫相比,越复杂的爬虫就越能体现Scrapy的优势。返回搜狐,查看更多

    责任编辑:

    展开全文
  • 生成项目scrapy提供一个工具来生成项目,生成的项目中预置了一些文件,用户需要在这些文件中添加自己的代码。打开命令行,执行:scrapy startproject tutorial,生成的项目类似下面的结构tutorial/scrapy....
  • Scrapy实例__链家租房爬虫 创建爬虫项目 scrapy startproject lianjia_zf 定义爬取的数据项 import scrapy class LianjiaZfItem(scrapy.Item): title = scrapy.Field() # 标题 update_time = scrapy.Field() #...
  • scrapy实例爬取网站

    2019-07-20 16:18:13
    使用Scrapy框架爬取网站,并将数据按照表格形式保存为csv格式
  • 下文参考:http://www.jb51.net/article/57183.htm个人也是稍加整理,修改其中的一些错误,这些错误与scrapy版本选择有关,个环境:Win7x64_SP1 + Python2.7 + scrapy1.1另外例子中的URL...
  • 原标题:Python 爬虫:Scrapy 实例(二)稍微增加点难度,做个所需项目多一点的,并将的结果以多种形式保存起来。我们就从网络天气预报开始。首先要做的是确定网络天气数据的来源。打开百度,搜索“网络天气预报”,...
  • 生成项目scrapy提供一个工具来生成项目,生成的项目中预置了一些文件,用户需要在这些文件中添加自己的代码。打开命令行,执行:scrapy startproject tutorial,生成的项目类似下面的结构tutorial/scrapy....
  • python scrapy实例:爬取笔趣阁长篇电子书 入门案例请看本人的scrapy学习一、二、三,本篇为进阶案例(网上有好多爬虫案例,但是80%都是无效的,大部分原因是原链接失效或者原网页发生改变,如果该实例失效,请读者...
  • 原标题:Python 爬虫:Scrapy 实例(二)稍微增加点难度,做个所需项目多一点的,并将的结果以多种形式保存起来。我们就从网络天气预报开始。首先要做的是确定网络天气数据的来源。打开百度,搜索“网络天气预报”,...
  • Python爬虫框架Scrapy实例(三)数据存储到MongoDB任务目标:爬取豆瓣电影top250,将数据存储到MongoDB中。items.py文件复制代码# -*- coding: utf-8 -*-import scrapyclass DoubanItem(scrapy.Item):# define the ...
  • Python爬虫框架Scrapy实例(一) 目标任务:爬取腾讯社招信息,需要爬取的内容为:职位名称,职位的详情链接,职位类别,招聘人数,工作地点,发布时间。 一、创建Scrapy项目 scrapy startproject Tencent 命令...
  • scrapy实例:爬新片场视频写在前面1、新建项目 写在前面 新片场地址 https://www.xinpianchang.com/channel/index/sort-like?from=navigator 1、新建项目 创建项目xpc:scrapy startproject xpc 在xpc项目根目录...
  • 10Scrapy实例

    2019-02-18 17:14:55
    步骤 1.建立一个Scrapy爬虫工程(路径是D:\pycodes) >scrapy startproject python123demo(工程名) 会在D盘中生成外层目录python123demo/, ... scrapy.cfg(部署scrapy爬虫的配置文件);...
  • Python爬虫框架Scrapy实例(二) 目标任务:使用Scrapy框架爬取新浪网导航页所有大类、小类、小类里的子链接、以及子链接页面的新闻内容,最后保存到本地。 大类小类如下图所示: 点击国内这个小类,进入页面后...
  • 简单的scrapy实例

    2019-06-01 18:21:00
    前天实验室的学长要求写一个简单的scrapy工程出来,之前也多少看了点scrapy的知识,但始终没有太明白,刚好趁着这个机会,加深一下对scrapy工作流程的理解。由于临近期末,很多作业要做(其实。。。。。。。。。。。...
  • python框架—scrapy实例

    2020-05-06 19:12:20
    Python爬虫框架—scrapy入门 Scrapy是一个为了爬取网站数据、提取数据而编写的应用型框架,一个非常强大的爬虫框架。今天我们就来用scrapy框架爬取网站上的基本信息,我们要爬取的网站是西刺网,目的是爬取西刺网上...
  • Scrapy实例1_英语点津

    2020-09-25 18:50:41
    学习scrapy爬虫框架的第一个实例,我是在网上找的公开课去学习,我觉得学代码还是自己做实例学的快一点 首选创建scrapy项目 打开Terminal 输入scrapy startproject 项目名
  • 利用scrapy框架实现matplotlib实例脚本批量下载至本地并进行文件夹分类;话不多说上代码: 首先是爬虫代码: import scrapy from scrapy.linkextractors import LinkExtractor from urllib.parse import ...
  • Python3网络爬虫教程18——分布式爬虫Scrapy实例(爬取一个页面) https://blog.csdn.net/u011318077/article/details/86692598 先补充几个常用命令; 7. Scrapy项目常用命令 先打开CMD命令,CD切换到要创建的项目的...
  • 2018Python学习资料下载 ...一、创建Scrapy项目 scrapy startproject Tencent 命令执行后,会创建一个Tencent文件夹,结构如下 二、编写item文件,根据需要爬取的内容定义爬取字段 # - * - coding: utf-8 -*- im...
  • 通过实例学习了解Scrapy爬虫框架的使用,并把爬取到的数据保存到数据库中和保存成一个Json格式的文件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,608
精华内容 643
关键字:

scrapy实例