爬虫——豆瓣电影top250

无论是动态网页爬虫和静态网页爬虫,实现的思路基 本上都是获取页面 html、页面解析、数据保存或输出。虽然获取页面 html 以及数据保存都 已经封装为通用函数,但依然编写繁琐。使用爬虫框架可以很好的解决这些问题,让我们在 编写爬虫的过程中专注于页面解析,大大简化编写爬虫的工作量,并能提高爬虫运行的效率。

所谓的爬虫框架,是一个半成品的爬虫,已经实现了工作队列、下载器、保存处理数据 的逻辑以及日志、异常处理、反反爬虫等通用功能。对于使用者来说,更多的工作是通过更 改配置调整需要开启的通用功能,让我们更专注于分析页面,编写网站的爬取规则。

Scrapy 爬虫框架是 Python 中最著名、最受欢迎、社区最活跃的爬虫框架。是人们为了 爬取网站数据、提取结构性数据而编写,可以应用在包括数据挖掘、信息处理或存储历史数 据等一系列的程序中。

1、命令行安装
在命令行下安装 Scrapy 比较简单,只需要输入如下命令即可

pip install scrapy

由于 pip 安装会自动安装 scrapy 爬虫框架依赖的各种包,安装速度较慢,出错概率较 大,建议增加-i 参数,使用清华镜像安装

pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple

Scrapy 快速入门

1、创建爬虫项目

打开 pycharm,在底部状态栏中点击“Terminal”,输入“scrapy startproject doubanSpider”,其中 baiduSpier 为 Scrapy 项目名称。

2.创建爬虫文件

爬虫项目和爬虫的关系为 1 对多的关系。一个爬虫项目可以由多个爬虫共同组成。如创 建一个新闻类的爬虫项目,可能会爬取百度新闻、腾讯新闻等多个网站的新闻。就可以创建 多个爬虫文件。

上图的提示中已经指引了此步骤的操作方法。首先使用“cd doubanSpider” 命令进入 目录 doubanSpider,此目录为“创建爬虫项目”时通过模板自动生成的。然后使用命令“scrapy genspider douban douban.com” 生成爬虫文件。其中参数“douban”为爬虫名称,需要注意 的是爬虫文件的名称不能和爬虫项目 doubanSpider 重复。参数“douban.com”为域名。

在 doubanSpider/doubanSpider/spiders 目录下找到 douban.py 文件。

    def parse(self, response):for row in response.xpath("//div[@class='item']"):item = Doubanspider2Item()url=row.xpath("div[2]/div/a/@href").get()# 电影名item["movie"] = row.xpath("div[2]/div[1]/a/span[1]/text()").extract()[0]# 评价人数item["number1"]=row.xpath("div[2]/div[2]/div/span[4]/text()").extract()[0].split('人评价')[0].strip()# 导演item["director"] = row.xpath("div[@class='info']/div[@class='bd']/p/text()").extract()[0].split(':')[1].split('主演')[0].strip()# 主演try:actor = row.xpath("div[@class='info']/div[@class='bd']/p/text()").extract()[0].split(':')[2].split('/')[0].strip()except Exception as e:actor = 'null'item["actor"]=actor# 年份item["date1"] = re.search(r'\d{4}',row.xpath("div[@class='info']/div[@class='bd']/p/text()").extract()[1]).group(0)# 产地item["area1"]= row.xpath("div[@class='info']/div[@class='bd']/p/text()").extract()[1].split('/')[1].strip()# 类型item["type1"] = row.xpath("div[@class='info']/div[@class='bd']/p/text()").extract()[1].split('/')[2].strip()# 评分item["score"]= row.xpath( "div[@class='info']/div[@class='bd']/div[@class='star']/span[@class='rating_num']/text()").extract()[0]yield item

使用 Scrapy 框架的爬虫程序使用面向对象的方式进行封装。继承自 scrapy.Spider 类。 name 属性定义的为爬虫的名称,是我们使用“scrapy genspider baidu baidu.com”命 令时定义的,在同一个项目中可以定义多个爬虫,但必须保证爬虫名称唯一。

属性 allowed_domains 定义过滤爬取的域名,不在范围内约定的域名将不会进行爬取。类型 为列表,表示可以有多个域名。

属性 start_urls 定义爬虫启动时的默认爬取的地址,在通常情况下,爬虫默认从此地址开始爬取。

parse 方法是解析网页数据的核心方法。parse 方法以 response 作为参数,内容是爬取到的 页面 html 内容。细心的读者会发现,使用 Scrapy 框架将会省略使用 requests 或 urllib 库获取 页面内容的步骤

3.定义爬取数据项

在编写爬虫前,我们需要先定义爬取的数据项,只是数据项的命名,不涉及具体的数据类 型。百度首页导航链接爬虫比较简单,需要爬取的数据只有导航标签名称以及 url 地址。定义爬 取数据项是为后续步骤输出做准备。 在doubanSpider/doubanSpider/spiders 文件夹下找到 items.py 文件。代码如下

import scrapy
class Doubanspider2Item(scrapy.Item):movie = scrapy.Field()  # 电影名number1 = scrapy.Field()director = scrapy.Field() #导演actor = scrapy.Field()  #主演score = scrapy.Field()   #评分type1 = scrapy.Field()  #类型area1 = scrapy.Field()   #地区date1 = scrapy.Field()  # 上映日期
4.定义爬虫解析

在编写解析 parse 方法前,需要优先考虑选择器的使用。Scrapy 爬虫框架是在 Lxml 基础上 构建了一套提取数据的机制,通过特定的 XPath 或 CSS 选择器来选择 HTML 页面中的某个部分。

Scrpay 选择器在速度和解析准确性上和 Lxml 非常相似。 前面章节已经讲解过 XPath 表达式,读者已有深入的了解,同时 XPath 提供了比 CSS 选择器 更强大的功能,所以推荐使用 XPath 来进行页面解析。实际上 Scrapy 的 CSS 选择器最终在运行 时也是转换为 XPath 的语法。

Scrapy 爬虫框架提供了选择器的快捷方式,response.xpath()和 response.css(),让用户直 接使用选择器。

5.运行爬虫

运行爬虫程序,需要使用命令“scrapy crawl 爬虫名”。在“Terminal”下执行命令 “Scrapy crawl douban”前,必须进入爬虫项目所在的目录,否则无法正常运行。当前项目 名为 doubanSpider,所以首先使用“cd doubanSpider”进入爬虫项目目录

爬虫运行后会打印输出非常多的日志信息,是因为缺省情况下日志等级为 info。可在 配置文件“doubanSpider/doubanSpider/settings.py”文件中进行调整。

ROBOTSTXT_OBEY = False #关闭 robots 协议,否则很多页面都无法爬取 LOG_LEVEL=“WARNING” #日志为警告以上才显示

调整后程序重新运行,发现没有任何提示,是因为 parse 函数中没有任何输出。增加-o
参数,将爬取的结果输出为文件。命令为“scrapy crawl douban -o douban.csv”。运行后 在 doubanSpider 目录下查看 douban.csv 文件。

完整代码

1.douban.py

# -*- coding: utf-8 -*-
import scrapy
import re
from doubanSpider2.items import Doubanspider2Itemclass DoubanSpider2(scrapy.Spider):name = 'douban'allowed_domains = ['movie.douban.com','doubanio.com']start_urls = ['https://movie.douban.com/top250?start=' + str(i) for i in range(0, 250, 25)]def parse(self, response):for row in response.xpath("//div[@class='item']"):item = Doubanspider2Item()url=row.xpath("div[2]/div/a/@href").get()# 电影名item["movie"] = row.xpath("div[2]/div[1]/a/span[1]/text()").extract()[0]# 评价人数item["number1"]=row.xpath("div[2]/div[2]/div/span[4]/text()").extract()[0].split('人评价')[0].strip()# 导演item["director"] = row.xpath("div[@class='info']/div[@class='bd']/p/text()").extract()[0].split(':')[1].split('主演')[0].strip()# 主演try:actor = row.xpath("div[@class='info']/div[@class='bd']/p/text()").extract()[0].split(':')[2].split('/')[0].strip()except Exception as e:actor = 'null'item["actor"]=actor# 年份item["date1"] = re.search(r'\d{4}',row.xpath("div[@class='info']/div[@class='bd']/p/text()").extract()[1]).group(0)# 产地item["area1"]= row.xpath("div[@class='info']/div[@class='bd']/p/text()").extract()[1].split('/')[1].strip()# 类型item["type1"] = row.xpath("div[@class='info']/div[@class='bd']/p/text()").extract()[1].split('/')[2].strip()# 评分item["score"]= row.xpath( "div[@class='info']/div[@class='bd']/div[@class='star']/span[@class='rating_num']/text()").extract()[0]yield item

2.items.py

# -*- coding: utf-8 -*-# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapy
class Doubanspider2Item(scrapy.Item):movie = scrapy.Field()  # 电影名number1 = scrapy.Field()director = scrapy.Field() #导演actor = scrapy.Field()  #主演score = scrapy.Field()   #评分type1 = scrapy.Field()  #类型area1 = scrapy.Field()   #地区date1 = scrapy.Field()  # 上映日期

3.settings.py

BOT_NAME = 'doubanSpider2'SPIDER_MODULES = ['doubanSpider2.spiders']
NEWSPIDER_MODULE = 'doubanSpider2.spiders'ROBOTSTXT_OBEY = False
LOG_LEVEL="WARNING" #日志为警告以上才显示
# Configure maximum concurrent requests performed by Scrapy (default: 16)

爬虫——豆瓣电影top250相关推荐

  1. Python爬虫豆瓣电影top250

      我的另一篇博客,Python爬虫豆瓣读书评分9分以上榜单   有了上次的基础,这次简单爬了下豆瓣上电影TOP250,链接豆瓣电影TOP250.   打开链接,查看网页源代码,查找我们需要的信息的字 ...

  2. python爬虫-豆瓣电影Top250

    豆瓣电影Top250 一.准备环境 idea+python插件/python 一.需求分析 1. 运用代码获取豆瓣电影Top250里面电影的相关信息: 影片详情链接: 影片名称: 影片图片链接: 影片 ...

  3. python 豆瓣电影top250_[python爬虫]豆瓣电影Top250简单数据分析绘图

    一:简介 通过抓取豆瓣电影Top250的数据,分别进行了三个数据统计,分别是:上榜的电影上映的年份,该年份总共上榜的电影数量,数量为0的就没有统计了:各个国家地区出品的电影数量:250部电影的各个类型 ...

  4. 【scrapy爬虫】了解Scrapy+爬虫豆瓣电影Top250信息

    Scrapy爬虫框架 scrapy是什么 它是一个快速功能强大的开源网络爬虫框架 Github地址:https://github.com/scrapy/scrapy 官网地址:https://scra ...

  5. 爬虫:豆瓣电影top250

    1.目标 爬虫豆瓣电影top250(https://movie.douban.com/top250?start=0) 2. 代码实现 难点1:多页爬虫编辑url 观察到页面切换仅是start参数变化, ...

  6. append从一个添加到另一_真特么激动第一个爬虫----爬取豆瓣电影top250

    养成习惯,先赞后看!!! 前言 之前一直对爬虫有兴趣,但是一直没有真正静下心来去好好学习过,这一段时间跟着b站上的一个教程做了自己人生中第一个爬虫程序,还是很有成就感的. 准备工作 1. 我们爬取一个 ...

  7. python爬取豆瓣电影top250_用Python爬虫实现爬取豆瓣电影Top250

    用Python爬虫实现爬取豆瓣电影Top250 #爬取 豆瓣电影Top250 #250个电影 ,分为10个页显示,1页有25个电影 import urllib.request from bs4 imp ...

  8. Python爬虫 爬取豆瓣电影TOP250

    Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...

  9. 爬虫(豆瓣电影Top250数据分析)学习笔记

    学习了有关python爬虫的内容,也算有所收获,写下第一篇博客来对所学进行一个总结,也算督促自己进行主动研究学习的第一步. 主要内容: 首先总结一下学习的主要内容: 从豆瓣获取数据 建立SQLite数 ...

最新文章

  1. POS 收款机资料整理
  2. 京东大型API网关实践之路
  3. Fiddler抓包使用教程-QuickExec
  4. 如何构建一个向导操作模式程序
  5. (CCPC 2020 网络选拔赛)HDU 6900 Residual Polynomial(分治 + NTT)
  6. Netty的使用:Server和Client通信
  7. 如何用maven tycho构建自己的Eclipse RCP应用
  8. 西门子g120变频器接线图_西门子变频器调试软件汇总starter,starterdrive,v-assistant
  9. 暴力破解之NTscan
  10. win10蓝牙怎么开_摩托罗拉对讲机蓝牙写频方法
  11. python计算1的平方减2的平方加3的平方减4的平方怎么算_100的平方减99的平方加98的平方减97的平方怎么算...
  12. Rollup 插件开发牛刀小试
  13. 2021年全新UI界面1:1仿皮皮虾APP段子
  14. 电商产品设计:拆单规则和业务场景详解
  15. Java面试题总结-2022版
  16. android百度地图API 骑行,步行导航的DEMO以及途径点问题
  17. chp2-2-2_fmm_word_seg通过最大正向匹配算法对句子进行切分
  18. Mysql密码修改方式
  19. NE555使用的一些心得
  20. 如何安装和使用 Windows XP 的故障恢复控制台

热门文章

  1. 品钛故事:如何在淘金热中卖水? | 一点财经
  2. 学生上课考勤系统jsp_jsp学生考勤在线请假系统
  3. 超级大数据公司即将诞生 全球招募大数据领域人才
  4. Barnes-Hut算法(quad-tree的一个应用)
  5. Microsoft Enterprise Library 简介与请大家下载Microsoft Enterprise Library 5.0体验微软最新技术应用于企业信息平台
  6. scrapy间歇性响应为空/降速/缓存
  7. 【让安卓手机快速接通笔记本WIFI的小技巧】
  8. 如何提取北京住房公积金
  9. OKR文化:明确职责与庆功会
  10. 【毕业设计day04】思路理清