scrapy爬虫练习

这篇博客详细介绍了使用Scrapy框架进行爬虫实践的过程,包括创建工程、定义数据模板、编写爬虫规则、设置配置、处理数据以及执行爬虫的步骤。在数据处理中提到了Python3中文件编码的问题,以及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是一篇学习http://www.cnblogs.com/kongzhagen/p/6549053.html的练习
1.创建工程

scrapy startproject movie

2.创建爬虫

cd movie
scrapy genspider meiju meijutt.com

3.自动创建目录

  • scrapy.cfg 项目的配置信息,主要为Scrapy命令行工具提供一个基础的配置信息。(真正爬虫相关的配置信息在settings.py文件中)
  • items.py 设置数据存储模板,用于结构化数据,如:Django的Model
  • pipelines 数据处理行为,如:一般结构化的数据持久化
  • spiders 爬虫目录,如:创建文件,编写爬虫规则
  • settings.py 配置文件,如:递归的层数、并发数,延迟下载等
  • meiju.py 这是第二步里创建的爬虫文件
    在这里插入图片描述

4.设置数据存储模板
items.py

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

5.编写爬虫
meiju.py

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

6.设置配置文件
settings.py增加如下内容

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

此处是设置数据读取的优先顺序,其实读一条数据的时候不需要加这个
7.编写数据处理脚本
pipelines.py

class MoviePipeline(object):
    def process_item(self, item, spider):
         with open("my_meiju.txt",'ab') as fp:
            fp.write(item['name'].encode("utf8") + b'\r\n')

参考的原教程此处使用

with open("my_meiju.txt",'a') as fp:
            fp.write(item['name'].encode("utf8") + '\n')

会发生TypeError: can’t concat str to bytes报错,报错的原因是“Python3给open函数添加了名为encoding的新参数,而这个新参数的默认值却是‘utf-8’。这样在文件句柄上进行read和write操作时,系统就要求开发者必须传入包含Unicode字符的实例,而不接受包含二进制数据的bytes实例。”所以把文件打开类型改为二进制的ab而不是文本类型的a,同时在‘\n’前添加b,但是这样更改会导致在txt里看到运行结果没有换行,而使用word打开meiju.txt则能看到换行,所以添加\r使得换行在txt中可见。
8.执行爬虫

cd movie
scrapy crawl meiju --nolog

nolog可以去除执行日志的显示,让命令行界面更干净,删除–nolog即可看到执行日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值