Python升级打怪—Scrapy零基础小白入门

目录

一、Scrapy框架简介

二、入门

(一) 安装

(二) 基本使用

三、案例实战

1. 首先创建项目

2. 生成爬虫

3. 数据处理

4. 配置Scrapy爬虫参数

5. 爬虫

6. 运行爬虫

四、总结


一、Scrapy框架简介

Scrapy 是一个快速高级的 Web 抓取网页抓取框架,用于爬取网站并从页面中提取结构化的数据。它使用 Python 编写。Scrapy 提供了强大的工具来处理下载、解析、存储数据等操作,并且非常适合进行大规模的网络爬虫开发。

二、入门

(一) 安装

基于命令行安装

pip install scrapy

如果速度很慢的可以更换一下镜像源

(二) 基本使用

  1. 创建项目
scrapy startproject myproject
  1. 生成爬虫
  • 在当前目录下输入命令,将在myproject/spider目录下创建一个名为demo的爬虫文件,并指定爬取域的范围
scrapy genspider demo "piao.qunar.com"
  1. 数据处理
先在items.py文件中定义你希望爬取的数据结构,然后通过pipeline.py文件定义数据的处理逻辑
  1. 项目参数设置
在setting文件中可以设置项目的配置,比如请求头、延迟请求时间、管道存储等等
  1. 爬虫
在生成的demo文件中进行数据爬取
  1. 运行
  • demo:爬虫文件,也就是前面步骤2生成的文件
scrapy crawl demo

三、案例实战

来到案例实战,也是爬虫入门必爬的网站:豆瓣爬取的内容是豆瓣Top250的电影数据

1. 首先创建项目

scrapy startproject movie

2. 生成爬虫

注意我们需要的只是豆瓣的域名,而不是豆瓣网的完整网址

scrapy genspider douban "movie.douban.com"

3. 数据处理

定义我们要保存的数据结构,再通过pipelines文件进行简单处理

import scrapy


class MovieItem(scrapy.Item):
    rank = scrapy.Field()  # 电影排名
    name = scrapy.Field()  # 电影名称
    introduction = scrapy.Field()  # 电影简介
    rating = scrapy.Field()  # 电影评分
    comment_total = scrapy.Field()  # 评论人数
from .items import MovieItem
import csv


class MoviePipeline:
    def __init__(self):
        # 当爬虫开始时调用,打开文件准备写入
        self.file = open('豆瓣Top250电影数据.csv', 'w', newline='', encoding='utf-8')
        self.writer = csv.writer(self.file)
        # 写入表头
        self.writer.writerow(['rank', 'name', 'introduction', 'rating', 'comment_total'])

    def open_spider(self, spider):
        print('开始爬虫...')

    def process_item(self, item: MovieItem, spider):
        # 处理评论人数字段数据 爬取到的数据 279300人评价 => 希望的数据 279300
        item['comment_total'] = item['comment_total'][:-3]

        # 对每个Item调用,将Item写入CSV文件
        self.writer.writerow((item['rank'], item['name'], item['introduction'],
                              item['rating'], item['comment_total']))
        # 不要忘记返回item,否则后续的pipeline将不会接收到这个item
        return item

    def close_spider(self, spider):
        print("爬虫结束....")

4. 配置Scrapy爬虫参数

在settings.py文件中配置项目的各种设置,比如请求头、请求头、中间件、管道等。

# ITEM_PIPELINES是一个字典,键是Pipeline类的路径(从项目根目录开始),值是该Pipeline的优先级(数字越小,优先级越高)
ITEM_PIPELINES = {
   "movie.pipelines.MoviePipeline": 300,
}
# 请求头
USER_AGENT = ""

5. 爬虫

在生成的文件中编写爬虫的代码逻辑,start_urls就是我们要爬取的网页,在parse函数中通过Xpath解析网页信息,拿到我们需要的字段数据,这里Xpath的具体用法不做具体讲解,不懂的可以详查。

import scrapy
from scrapy import Selector, Request
from ..items import MovieItem


class DoubanSpider(scrapy.Spider):
    name = "douban"
    allowed_domains = ["movie.douban.com"]
    start_urls = ['https://movie.douban.com/top250']

    def parse(self, response):
        sel = Selector(response)
        movie_items = sel.xpath('//div[@class="article"]//ol[@class="grid_view"]/li')
        for movie in movie_items:
            item = MovieItem()
            item['rank'] = movie.xpath('.//div[@class="pic"]/em/text()').extract_first()  # 电影排名
            name = movie.xpath('.//div[@class="hd"]//span[1]/text()').extract_first()  # 电影名称
            item['name'] = name
            item['introduction'] = movie.xpath('.//div[@class="bd"]//span[@class="inq"]/text()').get()  # 电影简介
            item['rating'] = movie.xpath('.//div[@class="star"]/span[2]/text()').extract_first()  # 电影评分
            item['comment_total'] = movie.xpath('.//div[@class="star"]/span[4]/text()').extract_first()  # 评价人数
            print("正在爬取 %s 电影数据" % name)
            yield item

        nextLink = sel.xpath('//span[@class="next"]/link/@href').extract()

        if nextLink:
            next_page_url = nextLink[0]
            yield Request(url=response.urljoin(next_page_url), callback=self.parse)

6. 运行爬虫

打开控制台,输入命令,开启爬虫

scrapy crawl douban

在爬取完成之后,会在项目的根目录下生成我们设置的存储文件,里面就是我们所爬取到的数据

四、总结

当然,这只是Scrapy的入门,Scrapy框架功能非常强大,感兴趣的朋友也可以详细了解了解,这里这是给大家入门玩玩,但是爬虫也要注意网站规则!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值