学习网址:

http://www.ituring.com.cn/article/114408

http://python.jobbole.com/86584/

https://segmentfault.com/a/1190000003870052

runSpider->http://blog.csdn.net/wangsidadehao/article/details/52911746

CrawlSpider-->http://www.jianshu.com/p/0f64297fc912

总概:scrapy爬取网站的一般分为以下几步:1.新建scrapy project;2.定义Item;3.编写spider;4.定义pipelines;5.进行setting设置

1.新建scrapy project

首先,需要建立一个scrapy的项目。我用pycharm创建项目,所以需要将项目名称写入parameter里。

1a.创建一个CreateProj的python文件,命令和脚本设置parameter如下: startproject YourProjectName

#__author__='ZHENGT'

# -*- coding: utf-8 -*-

from scrapy import cmdline

cmdline.execute() #创建一个Project

1b.运行后你会看到一个新建一个名字为allnex的project,结构如下

scrapy.cfg: 项目的配置文件

tutorial/: 该项目的python模块, 在这里添加代码

....__init__.py 项目的初始化文件

....items.py: 项目中的item文件

....pipelines.py: 项目中的pipelines文件

....settings.py: 项目全局设置文件

....spiders/ 爬虫模块目录

....__init__.py 爬虫初始化文件

2.接下来,需要创建spider,在spiders目录下面,创建一个名为movie_spider的脚本文件。目录结构如下

scrapy.cfg: 项目的配置文件

tutorial/: 该项目的python模块, 在这里添加代码

....__init__.py 项目的初始化文件

....items.py: 项目中的item文件

....pipelines.py: 项目中的pipelines文件

....settings.py: 项目全局设置文件

....spiders/ 爬虫模块目录

....__init__.py 爬虫初始化文件

....movie_spider.py 爬虫文件

2a.观察网页内容,定义Item

这两部分等一下在写movie_spider的时候要用到.

观察网页内容可以发现,标题和年份标签是在id="content"下面

而评分标签则是在id="interest_sectl"下面

2b.创建item,用以数据归集,这里只选取三个:电影名称->name,电影年份->year,豆瓣分数-score

from scrapy.item import Item,Field #从scrapy引用item类

class DoubanmovieItem(Item): #定义一个类,用以存储spider数据

# define the fields for your item here like:

name=Field() #电影名

year=Field() #上映年份

score=Field() #豆瓣分数

3.接下来就可以编写movie_spider爬虫

#__author__='ZHENGT'

# -*- coding: utf-8 -*-

from scrapy.selector import Selector #引入Selector分析xpath

from scrapy.contrib.spiders import CrawlSpider,Rule #引入爬虫

from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor

from DoubanMovie.items import DoubanmovieItem #引入item类

class MovieSpider(CrawlSpider): #定义spider

name="doubanmovie" #定义spider名称

allowed_domains=["movie.douban.com"] #定义spider限制区域

start_urls=["https://movie.douban.com/top250"] #spider开始

rules=[

#CrawlSpider匹配下一页规则,并没有callback进行处理

Rule(SgmlLinkExtractor(allow=(r'https://movie.douban.com/top250\?start=\d+.*'))),

#CrawlSpider匹配下一层规则

Rule(SgmlLinkExtractor(allow=(r'https://movie.douban.com/subject/\d+')),

#使用函数进行处理

callback="parse_item"),

]

def parse_item(self,response): #数据处理,将返回pipelines

# print response.body #打印显示是否成功

sel=Selector(response) #将返回网页通过Selector转为xpath

item=DoubanmovieItem() #从items引入定义类

#进行网页数据抓取

item['name']=sel.xpath('//*[@id="content"]/h1/span[1]/text()').extract()

item['year'] = sel.xpath('//*[@id="content"]/h1/span[2]/text()').re(r'\((\d+)\)')

item['score'] = sel.xpath('//*[@id="interest_sectl"]/div/div[2]/strong/text()').extract()

return item

4.编写pipeline的类

f1 = "DoubanMovie.txt" #储存文件

class TxtPipeline(object): #定义pipeline

#Open Txt file

def process_item(self, item, spider):

#Insert data into txt

line=""

names=item['name'][0].encode("utf-8") #需要转码

years=item['year'][0].encode("utf-8")

scores=item['score'][0].encode("utf-8")

print type(names),type(years),type(scores),'<<

line=names+years+scores #str联接

f=open(f1,'a')

f.write(line)

f.write("\n")

f.close()

return item #返回值

5.设置settings.py

因为豆瓣不允许爬虫,所以需要设置USER_AGENT

BOT_NAME = 'DoubanMovie'

SPIDER_MODULES = ['DoubanMovie.spiders']

NEWSPIDER_MODULE = 'DoubanMovie.spiders'

# Crawl responsibly by identifying yourself (and your website) on the user-agent

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'

# Obey robots.txt rules

ROBOTSTXT_OBEY = True

DOWNLOAD_DELAY = 2

ITEM_PIPELINES = {

'DoubanMovie.pipelines.TxtPipeline': 1,

}

6.接下来,可以编写一个名字叫做Start_Spider来进行启动爬虫。

#__author__='ZHENGT'

# -*- coding: utf-8 -*-

#新建一个运行爬虫的模块

from scrapy.crawler import CrawlerProcess

from scrapy.utils.project import get_project_settings

from DoubanMovie.spiders.movie_spider import MovieSpider #引入spider类

#获取setting.py模块设置

settings=get_project_settings() #设置

process=CrawlerProcess(settings=settings)

#添加spider,可以添加多个spider

process.crawl(MovieSpider)

#启动spider

process.start()

7.运行的时候结果,总共结果242个,丢失了几个

python用scrapy爬虫豆瓣_Python-用Scrapy爬取豆瓣电影相关推荐

  1. python爬取豆瓣电影信息可行性分析_Python爬虫实现的根据分类爬取豆瓣电影信息功能示例...

    本文实例讲述了Python爬虫实现的根据分类爬取豆瓣电影信息功能.分享给大家供大家参考,具体如下: 代码的入口:if __name__ == '__main__': main()#! /usr/bin ...

  2. 初探Scrapy爬虫框架之百度网页爬取

    初探Scrapy爬虫框架之百度网页爬取 scrapy框架及百度网页爬取与保存 一.scrapy框架简介 二.自己初使用的心得体会 1.爬虫之前明确目标 2.scrapy框架的简单使用流程 3.scra ...

  3. python爬虫入门练习:BeautifulSoup爬取猫眼电影TOP100排行榜,pandas保存本地excel文件

    传送门:[python爬虫入门练习]正则表达式爬取猫眼电影TOP100排行榜,openpyxl保存本地excel文件 对于上文使用的正则表达式匹配网页内容,的确是有些许麻烦,替换出现任何的差错都会导致 ...

  4. 朴素贝叶斯情感分析评分python_「豆瓣影评」从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(上) - seo实验室...

    豆瓣影评 一.爬取豆瓣影评 基本思路:先获取每个电影的评论区链接,然后依次进入其评论区爬取评论.选取10部电影,每部200条评论. 用到的包为:BeautifulSoup,urllib 这里选取的链接 ...

  5. python实例豆瓣音乐代码_Python爬虫实战(3)-爬取豆瓣音乐Top250数据(超详细

    前言 首先我们先来回忆一下上两篇爬虫实战文章: 第一篇:讲到了requests和bs4和一些网页基本操作. 第二篇:用到了正则表达式-re模块 今天我们用lxml库和xpath语法来爬虫实战. 1.安 ...

  6. python 爬取豆瓣某一主题书单_Python爬虫 || 使用requests和xpath爬取豆瓣Top250书单内容全解。...

    昨天,我们了解了如何爬取豆瓣某一个电影固定的位置信息,包含电影名称.导演.演员及评分等,今天我们来了解一下如何爬取豆瓣Top250书单,并如何将爬取到的内容存放到本地. 废话不多说了,shou my ...

  7. [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...

  8. Python爬虫初探(九)——爬虫之Beautifulsoup4实战(爬取豆瓣信息)

    前面两章咱们介绍了Beautifuisoup4模块的简单使用,今天就用它来爬取豆瓣信息.话不多说,咱们开始吧. 一.拿到url地址 二.获取豆瓣数据 三.保存文件 需求: 爬取标题.评分.详情页的地址 ...

  9. Python网络爬虫:利用正则表达式方法爬取‘’豆瓣读书‘’中‘’新书速递‘’条目

    1.简述:正则表达式是爬虫的方法之一,这里利用Requests库进行爬取,尽管Urllib也能进行爬取,但过程过于繁琐,在了解Urllib的爬取过程后,没有进行实战演练,但在学习了Requests的爬 ...

  10. python爬豆瓣电视剧_python requests库爬取豆瓣电视剧数据并保存到本地详解

    首先要做的就是去豆瓣网找对应的接口,这里就不赘述了,谷歌浏览器抓包即可,然后要做的就是分析返回的json数据的结构: https://movie.douban.com/j/search_subject ...

最新文章

  1. ArcEngine的ToolbarControl解析
  2. Linux界面自动化测试框架不完全汇总
  3. MPI编程及性能优化
  4. Xcode8打包上传后构建版本消失问题
  5. Android 编译系统分析(一)
  6. 微信红包系统架构的设计和优化分享
  7. python学习之数据类型(int,bool,str)
  8. 1-3移动均线交叉策略2
  9. python工资一般多少p-为什么这么多人喜欢Python?Python的就业方向是什么?
  10. qtextedit改变单个字的颜色_孩子从“妈妈”叫到“妈”,称呼少了一个字,暗示孩子三方面变化...
  11. linux用户间文件互传,linux之间的文件互传-scp命令
  12. UML建模:基于智慧校园的二手交易平台
  13. 万特电能表接线仿真系统 软件_电工技能——分享一款超实用的电工仿真教学接线Flash动画软件...
  14. 深入解密比Guava Cache更优秀的缓存-Caffeine
  15. 伯努利试验及n重伯努利试验
  16. OSChina 周日乱弹 —— 我们今天不上班!
  17. the little scheme 代码
  18. Spring Data JPA 4.方法定义规范
  19. Java 随手写的一个英语单词练习器
  20. 奥比中光再度携手英伟达联合举办第三届3D视觉创新应用竞赛

热门文章

  1. ASP.NET 3.5中客户端回发及回调
  2. 再谈谈ADO.NET Data Service
  3. 提示cannot instantiate abstract class due to following members?
  4. POJ3254Corn Fields——状态压缩dp
  5. HDU_oj_2046 骨牌铺方格
  6. light_oj 1236 求最小公倍数( lcm(a,b) )等于n的数对 素因数分解
  7. 各浏览器中的鼠标滚轮事件处理
  8. DataSnap服务器从xe2升级到xe5报错的处理
  9. MFC初探 —— 设置软件开机自启
  10. Visual Stdio下安装WTL的向导Widzard