Python网络爬虫-Scrapy爬取美剧TOP100

Python网络爬虫-Scrapy爬取美剧TOP100

前言

本来Scrapy实例想写教授的那个股票数据爬虫,但是感觉不太全,所以自己另写一个实例,如题。
这个实例也是Python实验中的一个,当时也是没时间,所以又是应付式,,,现在重新写一次。

美剧TOP100爬虫

目标网址https://www.meijutt.com/new100.html

直接在之前创建的scrapydemo工程中新建一个爬虫:

1
>scrapy genspider meijv meijutt.com

先编写items.py,这个实例打算爬取排名和电影名字,我们使用两个字段:rank和name
item.py

1
2
3
4
5
6
7
8
9
10
11
12
13
import scrapy


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


class MeijvItem(scrapy.Item):
rank = scrapy.Field()
name = scrapy.Field()

再编写meijv爬虫
meijv.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# -*- coding: utf-8 -*-
import scrapy
from ..items import MeijvItem


class MeijvSpider(scrapy.Spider):
name = 'meijv'
# allowed_domains = ['meijutt.com']
start_urls = ['https://www.meijutt.com/new100.html']

def parse(self, response):
item = MeijvItem()
ranks = response.css("body .top-list i::text").extract()
names = response.css("body .top-list a::text").extract()
for rank, name in zip(ranks, names):
item['rank'] = rank
item['name'] = name
yield item

先在items.py中导入我们刚才编写的MeijvItem类,然后实例化一个对象。
使用CSS Selector来提取我们的信息。
数据装入item中,用yield返回给Pipeline。

接下来编写Pipeline
pipelines.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class ScrapydemoPipeline(object):
def process_item(self, item, spider):
return item


class MeijvPipeline(object):
def open_spider(self, spider):
self.f = open("meijv100.txt", 'w')

def process_item(self, item, spider):
line = "%s,%s\n" % (item['rank'], item['name'])
self.f.write(line)
return item

def close_spider(self, spider):
self.f.close()

手动创建一个Pipeline类,process_item()方法是必须的,参考教授的写法,把open_spider()和close_spider()方法也写上。
容器管道用于清洗数据,给数据去重,储存等,这里就直接储存到文本中。

还要在setting.py中设置ITEM_PIPELINES
setting.py

1
2
3
4
ITEM_PIPELINES = {
# 'scrapydemo.pipelines.ScrapydemoPipeline': 300,
'scrapydemo.pipelines.MeijvPipeline': 300,
}

最后就可以运行我们的爬虫了

1
>scrapy crawl meijv

最后还有一点,一个工程中会有多个爬虫,不同爬虫有不同的处理逻辑,这时需要为爬虫指定Pipeline。
可以使用Spider类的custom_settings属性,像这样

1
2
3
custom_settings = {
'ITEM_PIPELINES': {'scrapydemo.pipelines.MeijvPipeline': 300, }
}

差不多就这样,运行后查看爬取结果。
meijv.txt

1
2
3
4
5
6
7
8
1,私家侦探第三季
2,美爪屋第三季
3,厨艺大师第十季
....
98,信任之危第二季
99,时间隧道第一季
100,处女情缘第五季


Scrapy框架结束。

文章作者: SNCKER
文章链接: https://sncker.github.io/blog/2019/08/09/Python网络爬虫-Scrapy爬取美剧TOP100/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SNCKER's blog