文章目录

  • 前言
  • 一、scrapy如何安装
  • 二、scrapy项目实战
    • 1.创建scrapy项目
    • 2.明确目标
    • 3.制作爬虫
    • 4.存储内容
    • 5.运行爬虫
    • 6.在项目里新建一个main.py,方便爬虫运行
    • 7.将豆瓣电影数据保存到json文件中
    • 8.将电影数据保存到csv文件中
  • 总结

前言

Scrapy 是一套基于基于Twisted的异步处理框架,纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便


一、scrapy如何安装

pip install scrapy

https://docs.scrapy.org/en/latest/intro/install.html

二、scrapy项目实战

1.创建scrapy项目

scrapy startproject  firstScrapy

cd firstScrapy
scrapy genspider DoupanSipder  movie.douban.com

2.明确目标

爬取豆瓣电影数据

3.制作爬虫

import scrapyclass FirstscrapyItem(scrapy.Item):# define the fields for your item here like:#编号movie_id = scrapy.Field()#电影的封面图片movie_img_url = scrapy.Field()#电影的名称movie_name = scrapy.Field()#跳转的urlsecond_url = scrapy.Field()#电影的描述movie_description = scrapy.Field()#电影的评分星级movie_score = scrapy.Field()#电影的评论movice_comment = scrapy.Field()#电影的简介movie_tip = scrapy.Field()

解析爬虫

import scrapy
from  firstScrapy.items import FirstscrapyItem
class DoupanspiderSpider(scrapy.Spider):#爬虫名称name = 'douban_spider'#允许访问的域名allowed_domains = ['movie.douban.com']#访问的入口地址,丢到调度器里面start_urls = ['https://movie.douban.com/top250']#解析爬虫返回的文件数据def parse(self, response):#解析movie列表数据movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")if movie_list:for item in movie_list:douban_item = FirstscrapyItem()#电影序号movie_id =  item.xpath(".//div[@class='pic']//em//text()").extract()if len(movie_id) > 0:douban_item['movie_id'] = movie_id[0]#电影封面图片movie_img_url = item.xpath(".//div[@class='pic']//a//img//@src").extract()if len(movie_img_url) > 0:douban_item['movie_img_url'] = movie_img_url[0]#电影标题movie_name = item.xpath(".//div[@class='info']//div[@class='hd']/a/span/text()").extract()if len(movie_name) > 0:douban_item['movie_name'] = movie_name[0]#电影详情跳转url地址信息second_url = item.xpath(".//div[@class='info']/div[@class='hd']/a/@href").extract()if len(second_url) > 0 :douban_item['second_url'] = second_url[0]#电影描述movie_description = item.xpath(".//div[@class='info']//div[@class='hd']/a/span[@class='other']/text()").extract()if len(movie_description) > 0:douban_item['movie_description'] = movie_description[0]#电影评分movie_score = item.xpath(".//div[@class='info']//div[@class='bd']//div[@class='star']//span[@class='rating_num']/text()").extract()if len(movie_score) > 0:douban_item['movie_score'] = movie_score[0]#电影评论movie_comment = item.xpath(".//div[@class='info']//div[@class='bd']//div[@class='star']//span/text()").extract()if len(movie_comment) > 0:douban_item['movie_comment'] = movie_comment[1]#电影总结movie_tip =  item.xpath(".//div[@class='info']//div[@class='bd']//p[@class='quote']/span/text()").extract()if len(movie_tip) >0 :douban_item['movie_tip'] = movie_tip[0]#将数据交给管道处理yield douban_item#获取下一页的数据next_link = response.xpath("//span[@class='next']/link/@href").extract()if len(next_link) > 0 :next_link = next_link[0]#继续访问下一页url = "https://movie.douban.com/top250"+next_linkprint(url)yield scrapy.Request(url,callback=self.parse)

4.存储内容

启用管道的配置

将爬取的数据存储到mogodb中,这里使用dokcer 服务提供的mongodb

pip install pymongo

安装MongoDB详见
https://blog.csdn.net/u014265398/article/details/105949379?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161743195416780264056654%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161743195416780264056654&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v29-5-105949379.nonecase&utm_term=mogodb&spm=1018.2226.3001.4450

创建一个豆瓣用户数据库账号

db.createUser({ user: 'douban', pwd: '123456', roles: [{ role: "dbOwner", db: "douban" }] })
db.grantRolesToUser('douban', [{ role: 'dbOwner', db: 'douban' }])
db.auth('douban','123456')


pipelines.py

from itemadapter import ItemAdapter
import pymongo
from firstScrapy.settings import mongo_host,mongo_port,mongo_db_name,mongo_db_collection,mongo_account,mongo_password
class FirstscrapyPipeline:#定义初始化方法def __init__(self):db_name = mongo_db_namecollection_name = mongo_db_collection#获取mogodb连接信息# client = pymongo.MongoClient('mongodb://douban:123456@localhost:27017/')client = pymongo.MongoClient('mongodb://%s:%s@%s:%s/'%(mongo_account,mongo_password,mongo_host,mongo_port))#获取数据表mydb=client[db_name]self.post = mydb[collection_name]#数据入库def process_item(self, item, spider):#将字典数据转换为字典类型data = dict(item)self.post.insert(data)return item  # 必须实现返回

执行爬虫后

5.运行爬虫

scrapy crawl douban_spider


出现这个主要是settings.py 配置里面的user-aget没有配置,没有开启UA伪装

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'


在重新运行爬虫

已经得到豆瓣首页的网页信息

6.在项目里新建一个main.py,方便爬虫运行

from  scrapy import cmdlinecmdline.execute('scrapy crawl douban_spider'.split())

7.将豆瓣电影数据保存到json文件中

在项目根目录下执行如下命令

scrapy crawl douban_spider -o movie.json

这个时候项目根目录下就会有一个叫做movie的json文件

8.将电影数据保存到csv文件中

scrapy crawl douban_spider -o movie.csv


总结

当遇到要爬取多层网页的时候可以使用scrapy提供的方法传参,示例如下:

  yield scrapy.Request(choice_url,callback=self.parse_other,dont_filter=True,meta={'videoItem':videoItem,'firstResponse':firstResponse})

link 参数:爬取下个网页的url地址
callback:指定解析的回调函数
meta:可以把当前的页面的参数传递给下一个页面的解析方法,下一个页面在回调函数里面的response里面获取meta对象即可

def parse_other(self,response):meta = dict(response.meta)firstResponse = meta['firstResponse']

初体验scrapy-爬取豆瓣250电影数据相关推荐

  1. scrapy爬取豆瓣top250电影数据

    scrapy爬取豆瓣top250电影数据 scrapy框架 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. sc ...

  2. 爬虫实战(一)利用scrapy爬取豆瓣华语电影

    爬虫第一个项目是爬取豆瓣华语电影,后面将对这部分数据进行分析. 本文也是发表于『运筹OR帷幄』微信公众号的<用数据带你了解电影行业-华语篇>的爬虫介绍篇. 1. 爬取思路 在观察了豆瓣每个 ...

  3. scrapy爬取豆瓣所有电影信息(新手入门超详细版)

    本次小实验目标就是爬取豆瓣所有的电影,我们以豆瓣的分类页(https://movie.douban.com/tag/#/)作为start_urls,首要任务就是分析当前页面是否为动态加载,何为js动态 ...

  4. 基于xpath,多线程,爬取豆瓣250电影的海报

    完成过程 准备阶段 python 3.7编译环境 操作过程 通过requests获取网页源代码 通过xpath对网页关键信息进行提取 通过concurrent.futures模块增加多线程 对比单线程 ...

  5. Scrapy爬取豆瓣分类电影

    由于毕业设计推荐系统需要大量电影信息数据,从豆瓣电影爬取了一万多条电影数据,记录一下第一次爬数据,同时感谢豆瓣电影平台提供的数据. 爬取思想:豆瓣选电影页面用的是JS动态渲染,用谷歌浏览器查看点击加载 ...

  6. 【Python实战】爬取豆瓣排行榜电影数据(含GUI界面版)

    项目简介 这个项目源于大三某课程设计.平常经常需要搜索一些电影,但是不知道哪些评分高且评价人数多的电影.为了方便使用,就将原来的项目重新改写了.当做是对爬虫技术.可视化技术的实践了.主要是通过从排行榜 ...

  7. python-爬虫爬取豆瓣Top250电影数据

    目标效果: 代码: #-*- codeing =utf-8 -*- #################引入模块################# from bs4 import BeautifulSo ...

  8. python爬取豆瓣250排行榜数据

    学习python之余,想列一个观影清单,每次上豆瓣搜太麻烦了,就爬取一个清单自己使用吧. 直接上代码: coding:"utf-8" import requests import ...

  9. Scrapy爬取豆瓣图书Top250数据,在PowerBI中可视化分析

    文章目录 项目说明 Scrapy框架 网页分析 爬虫代码 items spiders pipelines main 爬取结果 PowerBI分析 分析结果 项目说明 近期在学习Python爬虫,看了很 ...

  10. python爬取豆瓣排行榜电影数据(含GUI界面版)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

最新文章

  1. 为什么(#39;b#39;+#39;a#39;+ +#39;a#39;+#39;a#39;)。toLowerCase()#39;banana#39;的结果?
  2. MOSS中对列表的一些操作(创建,查询等)
  3. python工资津贴的计算和排序-python sort、sorted高级排序技巧
  4. 前端进阶必备Node.js,你得了解一下
  5. Windows开机 桌面一片空白 无法操作
  6. mysql 数据库和表的增删改查
  7. python3视频教程哪个好_python3入门视频教程
  8. linux tar 绝对路径,tar打包使用绝对路径详解
  9. 音频处理——解析PCM格式实例(音量调控)
  10. 《Netlogo多主体建模入门》学习笔记(2)
  11. 当年,我为何关停了亲手创建的“北京圣思园”
  12. 关于Eureka的自我保护模式
  13. W3af详细安装与基本使用
  14. 科学研究设计六:有效性威胁
  15. 生于忧患,死于安乐。
  16. 学堂云 减脂与运动塑形
  17. 如何使用测试仪进行400G交换机性能测试
  18. Win10 USB转串口连接Linux主机调试
  19. 最后一天了(再见了)
  20. java mifare_java – NTAG212 Mifare Ultralight与身份验证

热门文章

  1. 如何用Python实现股票量化交易?
  2. kafka 修改分区_kafka分区
  3. 程序员的思维模型指南
  4. 设计模式大作业小型仓库管理系统【带数据库+文档】
  5. photoshop 大作业
  6. 计算机教育课题申请报告,课题结项申请报告
  7. 【破解软件】知音漫客免费看更多漫画
  8. 4078. 成绩表里找同学
  9. golang中的URL 的编码和解码(转)
  10. Java金额转换_阿拉伯数字转换成中国大写数字