scrapy爬虫框架入门实例

scrapy爬虫框架入门实例

  • 安装scrapy
  • scrapy组件和流程
  • 一个简单的项目实例(爬猫眼电影排行)
    • 项目结构
    • 分析要爬取的网页和内容
    • 创建一个spider
    • 定义需要的item
    • 然后修改spider的方法来获取信息
    • 运行并保存

安装scrapy

因为用的是anaconda,所以直接pip install scrapy就成功了。如果不成功可以pip install lxml先,可以查看下版本

scrapy --version
Scrapy 1.7.1 - project: tutorial

scrapy组件和流程

scrapy爬虫框架入门实例_第1张图片
scrapy爬虫框架入门实例_第2张图片

一个简单的项目实例(爬猫眼电影排行)

用终端创建,cd到你放scrapy项目的文件夹,然后开始项目maoyan是你的项目名,自己取名

scrapy startproject maoyan

项目结构

scrapy爬虫框架入门实例_第3张图片

文件 功能
scrapy.cfg 配置文件
spiders 存放你Spider文件,也就是你爬取的py文件
items.py文件 相当于一个容器,和字典较像
middlewares.py文件 定义Downloader Middlewares(下载器中间件)和Spider Middlewares(蜘蛛中间件)的实现
pipelines.py文件 定义Item Pipeline的实现,实现数据的清洗,储存,验证。
settings.py文件 全局配置

分析要爬取的网页和内容

  • 要爬取的网址是’https://maoyan.com/board/4?offset=0’ 然后往后的十个网页,写成列表
  • 然后是要爬取的内容:电影名、评分、主演等

scrapy爬虫框架入门实例_第4张图片

创建一个spider

属性或方法 作用
name 是项目的名字
allowed_domains 是允许爬取的域名,比如一些网站有相关链接,域名就和本网站不同,这些就会忽略。
start_urls 要访问的地址列表,和start_requests方法只需要定义一个,都是调用parse方法解析
start_requests方法 由此方法通过下面链接爬取页面
parse方法 是Spider的一个方法,在请求start_url后,之后的方法,这个方法是对网页的解析,与提取自己想要的东西。
response参数 是请求网页后返回的内容,也就是你需要解析的网页。
import scrapy

class MySpider(scrapy.Spider):
    name = 'maoyan'  # 项目名
    allowed_domains = ['maoyan.com']  # 允许访问的域名

    def start_requests(self):
        url_list = []
        for i in range(0,10):
            url_list.append('https://maoyan.com/board/4?offset='+str(i))
        # 定义爬取的链接
        urls = url_list
        for url in urls:
            # 爬取到的页面如何处理?提交给parse方法处理
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        pass

定义需要的item

  • item是保存爬取数据的容器,使用的方法和字典差不多。
  • 我们打开items.py文件,之后我们想要提取的信息有:
    index(排名)、title(电影名)、star(主演)、releasetime(上映时间)、score(评分)
class MaoyanItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    index = scrapy.Field()
    title = scrapy.Field()
    star = scrapy.Field()
    releasetime = scrapy.Field()
    score = scrapy.Field()

然后修改spider的方法来获取信息

from maoyan.items import MaoyanItem
...
    def parse(self, response):
        '''
        start_requests已经爬取到页面,那如何提取我们想要的内容呢?那就可以在这个方法里面定义。
        1、定义链接;
        2、通过链接爬取(下载)页面;
        3、定义规则,然后提取数据;
        '''
        # 这里用的css选择查找信息,也可以用xpath
        dl = response.css('.board-wrapper dd')
        for dd in dl:
            item = MaoyanItem()
            # extract()[0]等同于extract_first()
            item['index'] = dd.css('.board-index::text').extract_first()
            item['title'] = dd.css('.name a::text').extract_first()
            # strip方法是去除空格和换行符
            item['star'] = dd.css('.star::text').extract_first().strip()
            item['releasetime'] = dd.css('.releasetime::text').extract_first()
            item['score'] = dd.css('.integer::text').extract_first()+dd.css('.fraction::text').extract_first()
            yield item
 ...

运行并保存

这样就写完了一个简单的项目,运行即可:

  • 在终端的当前文件夹下输入:scrapy crawl maoyan(项目的名字)
  • 这样只运行了代码,并没有保存,保存有多种方式
  • -o maoyan.csv或者-o maoyan.xml或者-o maoyan.json
  • 设置编码格式 -s FEED_EXPORT_ENCODING=UTF8
  • 选择csv(表格)格式保存看看:scrapy crawl maoyan -o maoyan.csv -s FEED_EXPORT_ENCODING=UTF8

找到文件并打开:

你可能感兴趣的:(爬虫)