scrapy学习笔记(1)

初探scrapy,发现很多入门教程对应的网址都失效或者改变布局了,走了很多弯路。于是自己摸索做一个笔记。

环境是win10 python3.6(anaconda)。

安装

pip install scrapy

由于是第一次尝试,这次爬取美剧天堂(http://www.meijutt.com/)以下模块的剧名:

scrapy学习笔记(1)

1.创建工程

scrapy startproject movie

2.编辑items.py,设置数据存储模版

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

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html import scrapy class MovieItem(scrapy.Item):
# define the fields for your item here like:
name = scrapy.Field()

3.查看网页源代码,在spiders目录下创建爬虫文件meiju.py,如下:

# -*- coding: utf-8 -*-
import scrapy
from movie.items import MovieItem class MeijuSpider(scrapy.Spider):
name = "meiju"
allowed_domains = ["meijutt.com"]
start_urls = ['http://meijutt.com/'] def parse(self, response):
movies=response.xpath('//div[@class="c1_l_wap_contact"]/ul/li')
for each_movie in movies:
item=MovieItem()
item['name']=each_movie.xpath('./a/@title').extract()[0]
yield item

在parse函数中取文档中(//为选择匹配的节点,不考虑位置;/为选择根目录下的节点)属性为c1_l_wap_condact的div标签下的ul标签中的li标签。对每个元素选取a标签中的title属性。返回list格式,取第一个元素。(xpath语法参见 http://www.w3school.com.cn/xpath/xpath_syntax.asp)

yield函数的作用:“函数中使用yield,可以使函数变成生成器。一个函数如果是生成一个数组,就必须把数据存储在内存中,如果使用生成器,则在调用的时候才生成数据,可以节省内存。 ”

4.settings.py中增加以下内容,激活item pipeline组件:

ITEM_PIPELINES = {'movie.pipelines.MoviePipeline':100}

这里的整数值决定pipelines运行的先后顺序,小的先运行,大的后运行。整数值通常设置在0-1000之间。

为了避免莫名奇妙的报错,暂时设置ROBOTSTXT_OBEY = False。以后会尽量遵守君子协定吧。。

5.编辑pipelines.py

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

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html class MoviePipeline(object):
def process_item(self, item, spider):
with open("my_meiju.txt",'ab+') as fp:
fp.write(item['name'].encode('utf-8')+'\n'.encode('utf-8'))
return item

为了写入中文并且每次写入新的一行而不要覆盖,使用'ab+'。'\n'也要转为utf8格式。

6.执行爬虫(在movie目录下)

scrapy crawl meiju

生成的txt文件会出现在目录下了。内容如下:

抵押第一季
沉默的天使第一季
此时此刻第一季
黑道无边第一季
芝加哥故事第一季
相对宇宙第一季
不列颠尼亚第一季
一起单身第一季

今天先探秘到这里~

上一篇:Vs 控件错位 右侧资源管理器文件夹点击也不管用,显示异常


下一篇:CentOS 7+ 环境下安装MySQL