爬虫——豆瓣电影top250
爬虫——豆瓣电影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相关推荐
- Python爬虫豆瓣电影top250
我的另一篇博客,Python爬虫豆瓣读书评分9分以上榜单 有了上次的基础,这次简单爬了下豆瓣上电影TOP250,链接豆瓣电影TOP250. 打开链接,查看网页源代码,查找我们需要的信息的字 ...
- python爬虫-豆瓣电影Top250
豆瓣电影Top250 一.准备环境 idea+python插件/python 一.需求分析 1. 运用代码获取豆瓣电影Top250里面电影的相关信息: 影片详情链接: 影片名称: 影片图片链接: 影片 ...
- python 豆瓣电影top250_[python爬虫]豆瓣电影Top250简单数据分析绘图
一:简介 通过抓取豆瓣电影Top250的数据,分别进行了三个数据统计,分别是:上榜的电影上映的年份,该年份总共上榜的电影数量,数量为0的就没有统计了:各个国家地区出品的电影数量:250部电影的各个类型 ...
- 【scrapy爬虫】了解Scrapy+爬虫豆瓣电影Top250信息
Scrapy爬虫框架 scrapy是什么 它是一个快速功能强大的开源网络爬虫框架 Github地址:https://github.com/scrapy/scrapy 官网地址:https://scra ...
- 爬虫:豆瓣电影top250
1.目标 爬虫豆瓣电影top250(https://movie.douban.com/top250?start=0) 2. 代码实现 难点1:多页爬虫编辑url 观察到页面切换仅是start参数变化, ...
- append从一个添加到另一_真特么激动第一个爬虫----爬取豆瓣电影top250
养成习惯,先赞后看!!! 前言 之前一直对爬虫有兴趣,但是一直没有真正静下心来去好好学习过,这一段时间跟着b站上的一个教程做了自己人生中第一个爬虫程序,还是很有成就感的. 准备工作 1. 我们爬取一个 ...
- python爬取豆瓣电影top250_用Python爬虫实现爬取豆瓣电影Top250
用Python爬虫实现爬取豆瓣电影Top250 #爬取 豆瓣电影Top250 #250个电影 ,分为10个页显示,1页有25个电影 import urllib.request from bs4 imp ...
- Python爬虫 爬取豆瓣电影TOP250
Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...
- 爬虫(豆瓣电影Top250数据分析)学习笔记
学习了有关python爬虫的内容,也算有所收获,写下第一篇博客来对所学进行一个总结,也算督促自己进行主动研究学习的第一步. 主要内容: 首先总结一下学习的主要内容: 从豆瓣获取数据 建立SQLite数 ...
最新文章
- POS 收款机资料整理
- 京东大型API网关实践之路
- Fiddler抓包使用教程-QuickExec
- 如何构建一个向导操作模式程序
- (CCPC 2020 网络选拔赛)HDU 6900 Residual Polynomial(分治 + NTT)
- Netty的使用:Server和Client通信
- 如何用maven tycho构建自己的Eclipse RCP应用
- 西门子g120变频器接线图_西门子变频器调试软件汇总starter,starterdrive,v-assistant
- 暴力破解之NTscan
- win10蓝牙怎么开_摩托罗拉对讲机蓝牙写频方法
- python计算1的平方减2的平方加3的平方减4的平方怎么算_100的平方减99的平方加98的平方减97的平方怎么算...
- Rollup 插件开发牛刀小试
- 2021年全新UI界面1:1仿皮皮虾APP段子
- 电商产品设计:拆单规则和业务场景详解
- Java面试题总结-2022版
- android百度地图API 骑行,步行导航的DEMO以及途径点问题
- chp2-2-2_fmm_word_seg通过最大正向匹配算法对句子进行切分
- Mysql密码修改方式
- NE555使用的一些心得
- 如何安装和使用 Windows XP 的故障恢复控制台
热门文章
- 品钛故事:如何在淘金热中卖水? | 一点财经
- 学生上课考勤系统jsp_jsp学生考勤在线请假系统
- 超级大数据公司即将诞生 全球招募大数据领域人才
- Barnes-Hut算法(quad-tree的一个应用)
- Microsoft Enterprise Library 简介与请大家下载Microsoft Enterprise Library 5.0体验微软最新技术应用于企业信息平台
- scrapy间歇性响应为空/降速/缓存
- 【让安卓手机快速接通笔记本WIFI的小技巧】
- 如何提取北京住房公积金
- OKR文化:明确职责与庆功会
- 【毕业设计day04】思路理清