scrapy学习笔记(四)

实际任务千差万别,因此需对症下药。

这篇讲一个自己爬虫的简单实际应用。

A任务:scrapy爬取panda.tv的dota板块数据并输出文本出结果

新建工程:

> scrapy startproject pandatv

> cd pandatv

> scrapy genspider pandatv_spider

分析网页任务:

可以看到每个room的信息都包含在这个li标签内。

图一 网页结构分析

再一步分析可以看到我们需要爬取的主要信息来源于属性为“video-info”的子标签:


图二 爬取内容细节结构分析

然后就可以开始着手写爬虫了。

开始编辑pandatv_spider.py:

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

import scrapy


class PandatvSpiderSpider(scrapy.Spider):

    name = 'pandatv_spider'

    start_urls = ['https://www.panda.tv/cate/dota1?pdt=1.24.s1.15.7goptbe4fpt']

    def parse(self, response):

        print(response)

        lis = response.xpath('//li[contains(@class,"video-list-item video-no-tag video-no-cate ")]')

        room_id_lis = lis.xpath('@data-id').extract()

        num = lis.xpath('a/div[2]/span[3]/text()').extract()

        level = lis.xpath('a/div[2]/span[2]/i/@data-level').extract()

        f = open("out.txt","w")

        for i,j,k in zip(room_id_lis,num,level):

            i=i.encode('utf-8')

            j=j.encode('utf-8')

            k=k.encode('utf-8')

            print(i,":",j,":",k)

            print >> f, "%s %s %s" % (i,j,k)

        f.close()

这样不仅可以在powershell中直接观察到爬取效果,响应(200)有数值列表打印出来,并且在工作目录中出现了数据文件out.txt并包含我们想要的结果。

注意到最开始写的时候打印的字符为Unicode编码难以辨识,随后加入了语句data.encode('utf-8')打印出来的结果就舒服多了。

还有f句柄open函数>>写入print值的做法以及f.close()关闭写入的语法,都值得学习。

另外值得学习的是python内置函数zip,其任务是将几个变量的值组合成一个列表。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 最近一直想维护一个代理IP池,在网上找了三十多个免费提供代理IP的网站,想把这些代理都抓取下来存到本地数据库...
    leeyis阅读 5,698评论 1 4
  • 早上千万不要随便找喜欢的人聊天,因为他的态度决定了你今天一整天的心情。 中午也不要随便找喜欢的人聊天,因为他的...
    我喜欢wnf阅读 3,870评论 8 3
  • 我是个勤劳的吃货
    苍山暮雪阅读 1,742评论 1 11
  • 一 时间是一张被对折过的纸 我行走于褶皱 而你在平面 二 你拥有这世上最残忍的武器 当你的目光在我周围停留 我的世...
    茶酒伴ee阅读 1,832评论 1 4
  • 今天一早,可爱的出纳又打电话过来哭诉! 接我工作的S九点还没来公司,出口收入到现在都还没落实好! 我顿时不知道...
    桂宝是我阅读 1,306评论 0 0

友情链接更多精彩内容