scrapy爬虫学习笔记

scrapy学习笔记(四)

2018-06-04  本文已影响0人  ATangYaaaa

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

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

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,其任务是将几个变量的值组合成一个列表。

上一篇 下一篇

猜你喜欢

热点阅读