从入门到入土:python爬虫|scrapy初体验|安装教程|爬取豆瓣电影短评相关信息(昵称,内容,时间和评分)

从入门到入土:python爬虫|scrapy初体验|安装教程|爬取豆瓣电影短评相关信息(昵称,内容,时间和评分),第1张

从入门到入土:python爬虫|scrapy初体验|安装教程|爬取豆瓣电影短评相关信息(昵称,内容,时间和评分)

此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出。欢迎各位前来交流。(部分材料来源网络,若有侵权,立即删除)
本人博客所有文章纯属学习之用,不涉及商业利益。不合适引用,自当删除!
若被用于非法行为,与我本人无关

scrapy初体验
  • Scrapy
  • windows下scrapy安装
    • pip
    • pycharm setting
    • anaconda下安装
  • scrapy创建
  • 豆瓣电影评论scrapy实战
  • 代码
  • 运行情况

Scrapy
  • scrapy作为爬虫的框架可以说是方便了很多,至少不用手搓requests,从而模块化的进行爬虫开发。
  • scrapy的模块展示图如下

  • scrapy各个模块及作用如下。Spiders爬虫模块:构建起始请求并响应数据解析,主要为提取URL封装请求并且提取数据。Scheduler调度器模块:缓存请求并实现请求去重。Downloader下载器模块:发送请求, 获取响应数据,封装为Response。Item Pipeline管道模块:处理数据, 比如将数据保存在指定路径。ScrapyEngine引擎模块:作为运行过程的总指挥, 负责模块之间调度, 以及数据传递。Download Middlewares下载器中间件:在引擎和下载器之间, 可以对请求和响应数据进行处理, 比如: 实现随机代理IP, 随机User-Agent。爬虫中间件:爬虫和引擎之间,可以对请求和响应数据进行处理,比如过滤。
  • Scrapy运转流程:
    • 1)调度器从待下载链接中取出一个链接(URL);
    • 2)调度器启动爬虫模块;
    • 3)爬虫模块把URL传给下载器进行资源下载;
    • 4)提取目标数据,抽取出目标对象,则交给实体管道进行进一步的处理;比如存入数据库、文本;
    • 5)若是解析出的是链接(URL),则把URL插入到待爬取队列当中。

windows下scrapy安装 pip
pip install scrapy
pycharm setting
  • 直接进入setting
  • 如何进入intepreter
  • 搜索scrapy然后安装就好了
anaconda下安装
  • 这边先创建一个新的anaconda环境
conda create -n environment_name python=X.X
  • 创建成功后
conda activate environment
  • 然后安装scrapy
conda install scrapy
scrapy创建
  • 在对应的环境下,进入了指定目录后
scrapy startproject projectname
  • 然后进入爬虫目录
cd projectname
  • 进入后创建爬虫
scrapy genspider baidu www.baidu.com
  • 这边的baidu是爬虫类名,然后www.baidu.com是爬取目的url
  • 这个url可以随意输入,后续可以在代码中改动
豆瓣电影评论scrapy实战
  • 在对应的环境下,进入了指定目录后
scrapy startproject projectname

  • 可以看到创建成功了
  • 下一步创建爬虫

settings.py 是spdier项目的配置文件

这边我们需要改动一下robots协议并添加一下cookie请求

  • 这个

  • 还有这个
  • 和这个
代码

spider

import time
import scrapy
from bs4 import BeautifulSoup
from ..items import DoubanConmentScrapyItem

class SpiderSpider(scrapy.Spider):
    name = 'spider'
    allowed_domains = ['www.douban.com']

    def start_requests(self):
        URL = []
        for i in range(0,2):
            urls ='https://movie.douban.com/subject/3742360/comments?start={}&limit=20&status=P&sort=new_score'.format(i*20)
            URL.append(urls)
        for url in URL:
            time.sleep(2)
            yield scrapy.Request(url=url,callback=self.parse)
            print('@@@@@@@@@@@@@@@@@@@')

    def parse(self, response):

        r=response.text
        soup = BeautifulSoup(r, 'lxml')
        all = soup.find_all('div', {'class': 'comment'})
        i=0

        for every in all:
            i=i+1
            data = []
            comment = every.find('span', {'class': 'short'}).text
            vote = every.find('span', {'class': 'votes vote-count'}).text
            info = every.find('span', {'class': 'comment-info'})
            author = info.find('a').text
            score = info.find_all('span')[1]['class'][0][-2]
            times = info.find('span', {'class': 'comment-time'})['title']

            item=DoubanConmentScrapyItem()
            item['com_comment'] = comment
            item['com_vote'] = vote
            item['com_author'] = author
            item['com_score'] =score
            item['com_times'] =times
            data.append(item)
            yield item

items.py

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class DoubanConmentScrapyItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    com_comment = scrapy.Field()
    com_vote = scrapy.Field()
    com_author = scrapy.Field()
    com_score = scrapy.Field()
    com_times = scrapy.Field()

pipe

import csv

class DoubanConmentScrapyPipeline(object):
    def process_item(self, item, spider):
        data=[]
        result=[]
        with open("film.csv", "a", encoding="gb18030", newline="") as csvfile:
            writer = csv.writer(csvfile)
            for key in item:
                data.append(item[key])
            result.append(data)
            writer.writerows(result)

        return item


运行情况



可以看到爬取下来的豆瓣短评被保存在了csv中


拿下

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5495875.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存