Python 采用Scrapy爬虫框架爬取豆瓣电影top250
来源:互联网 发布:网络规划师通过率 编辑:程序博客网 时间:2024/04/30 03:51
scrapy 简介
在此,默认已经安装好Scrapy,如果没有安装可以到scrapy 官网下载安装。
注意: 在安装Scrapy之前首先需要安装一下python第三方库:(安装方法并不在本文讲解范围,请自行了解)
scrapy 爬取网页
scrapy 不同于简单的单线程爬虫,采用scrapy
框架写python爬虫需要生成许多个文件,这一件类似于java里面的web框架,许多工作都可以通过一些配置文件来完成。
##1.通过命令行方式生成一个Scrapy project:
在安装有Python环境的window主机下,打开命令窗口,通过 scrapy startproject doubanTest
就是可以生成一个Scrapy project。project的文件结构如下:
2.scrapy 文件结构
Item.py 定义需要抓取并需要后期处理的数据
Pipeline.py 用于存放执行后期数据处理的功能,从而使得数据的爬取和处理分开。
setting.py 用于配置Scrapy,从而修改user-agent,设定爬取时间间隔,设置代理,配置各种中间件等等。
3.需要爬取的内容
首先我们打开豆瓣电影TOP250
我们需要爬取的是上图中用红色方框框出的几项网页信息,包括电影名、电影介绍、评分、评论人数、经典的话。通过查看源码我们可以找到对应的位置,这里不详述,详见code。
4.code分析
(1)Item.py
上面提到了Item的功能,就是定义要抓取的数据
from scrapy import Item, Fieldclass DoubanmovieItem(Item): title = Field()#电影名 movieInfo = Field()#电影介绍 star = Field()#评分 critical = Field()#评分人数 quote = Field()#经典的话
(2)pipline.py
这里我们没有对Item中的数据做特殊处理,所以采用默认代码
class DoubanmoviePipeline(object): def process_item(self, item, spider): return item
(3)setting.py
BOT_NAME = 'doubanmovie'SPIDER_MODULES = ['doubanmovie.spiders']NEWSPIDER_MODULE = 'doubanmovie.spiders'#设置代理,有些网站是反爬虫,所以要将其伪装成浏览器USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.54 Safari/536.5'# Crawl responsibly by identifying yourself (and your website) on the user-agent# USER_AGENT = 'doubanmovie (+http://www.yourdomain.com)'FEED_URI = u'file:///F:/douban.csv'#文件保存路径FEED_FORMAT = 'CSV'#保存为CSV文件
(4)爬虫主程序
在生成的项目文件下,有一个spiders目录,这里就是放置我们爬虫主程序的地方,在这个文件下生成一个python文件,也就是我们要实现的功能
# -*- coding: utf-8 -*-import scrapyfrom scrapy.spiders import CrawlSpiderfrom scrapy.http import Requestfrom scrapy.selector import Selectorfrom doubanmovie.items import DoubanmovieItemclass Douban(CrawlSpider): # Douban是一个类,继承自CrawlSpider name = "douban" # 爬虫命名 start_urls = ['http://movie.douban.com/top250'] # 要爬取的页面地址 #url = 'http://movie.douban.com/top250' def parse(self, response): # print response.body item = DoubanmovieItem() selector = Selector(response) Movies = selector.xpath('//div[@class="info"]') for eachMoive in Movies: title = eachMoive.xpath('div[@class="hd"]/a/span/text()').extract() fullTitle = '' for each in title: fullTitle += each movieInfo = eachMoive.xpath('div[@class="bd"]/p/text()').extract() star = eachMoive.xpath('div[@class="bd"]/div[@class="star"]/span/text()').extract()[0] critical = eachMoive.xpath('div[@class="bd"]/div[@class="star"]/span/text()').extract()[1] quote = eachMoive.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract() # quote可能为空,因此需要先进行判断 if quote: quote = quote[0] else: quote = '' item['title'] = fullTitle item['movieInfo'] = ';'.join(movieInfo) item['star'] = star item['critical'] = critical item['quote'] = quote yield item # 提交生成csv文件 nextLink = selector.xpath('//span[@class="next"]/link/@href').extract() # 第10页是最后一页,没有下一页的链接 if nextLink: nextLink = nextLink[0] print nextLink yield Request(self.url + nextLink, callback=self.parse) # 递归将下一页的地址传给这个函数自己,在进行爬取
(5)运行爬虫
不同于简单单线程爬虫程序直接运行,这里我们还需要通过一个main.py来运行,需要自己手动生成,main.py代码如下:
from scrapy import cmdlinecmdline.execute("scrapy crawl douban".split())
(6)最终结果
- Python 采用Scrapy爬虫框架爬取豆瓣电影top250
- 爬虫框架scrapy,爬取豆瓣电影top250
- 使用scrapy框架爬取豆瓣电影top250信息
- 用scrapy框架爬取豆瓣Top250电影
- scrapy爬取豆瓣TOP250电影
- scrapy ------ 爬取豆瓣电影TOP250
- scrapy爬取豆瓣top250电影
- 用Python爬虫爬取豆瓣TOP250电影
- [Python/爬虫]利用xpath爬取豆瓣电影top250
- Python爬虫实战(一):爬取豆瓣电影top250排名
- python爬虫爬取豆瓣top250电影影评
- python爬虫,爬豆瓣top250电影
- Python爬取豆瓣电影top250
- Python爬取豆瓣电影Top250数据
- python+beautifulsoup爬取豆瓣电影TOP250
- Python爬取豆瓣电影top250
- python爬取豆瓣电影Top250
- python爬取豆瓣电影top250
- 23PL_SQL过程之建立触发器
- 24PL_SQL之组织机构树状展现
- 通过appearance统一设置UITabBarItem的文字属性
- 如何修改分享菜单的背景图片以及调用无UI方法自定义UI分享
- 好的语录
- Python 采用Scrapy爬虫框架爬取豆瓣电影top250
- Java8:创建Stream
- MVC中Controller控制器相关技术
- C语言基础 编写一个函数,判断输入的数字是不是水仙花数
- 让laravel5支持memcache
- Node.js 函数
- 基本运算符(Basic Operators)
- CategoryFragment中一级分类、二级分类的实现
- 图像局部特征(九)--斑点检测LOG算子