python用scrapy爬虫豆瓣_Python-用Scrapy爬取豆瓣电影
学习网址:
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爬取豆瓣电影相关推荐
- python爬取豆瓣电影信息可行性分析_Python爬虫实现的根据分类爬取豆瓣电影信息功能示例...
本文实例讲述了Python爬虫实现的根据分类爬取豆瓣电影信息功能.分享给大家供大家参考,具体如下: 代码的入口:if __name__ == '__main__': main()#! /usr/bin ...
- 初探Scrapy爬虫框架之百度网页爬取
初探Scrapy爬虫框架之百度网页爬取 scrapy框架及百度网页爬取与保存 一.scrapy框架简介 二.自己初使用的心得体会 1.爬虫之前明确目标 2.scrapy框架的简单使用流程 3.scra ...
- python爬虫入门练习:BeautifulSoup爬取猫眼电影TOP100排行榜,pandas保存本地excel文件
传送门:[python爬虫入门练习]正则表达式爬取猫眼电影TOP100排行榜,openpyxl保存本地excel文件 对于上文使用的正则表达式匹配网页内容,的确是有些许麻烦,替换出现任何的差错都会导致 ...
- 朴素贝叶斯情感分析评分python_「豆瓣影评」从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(上) - seo实验室...
豆瓣影评 一.爬取豆瓣影评 基本思路:先获取每个电影的评论区链接,然后依次进入其评论区爬取评论.选取10部电影,每部200条评论. 用到的包为:BeautifulSoup,urllib 这里选取的链接 ...
- python实例豆瓣音乐代码_Python爬虫实战(3)-爬取豆瓣音乐Top250数据(超详细
前言 首先我们先来回忆一下上两篇爬虫实战文章: 第一篇:讲到了requests和bs4和一些网页基本操作. 第二篇:用到了正则表达式-re模块 今天我们用lxml库和xpath语法来爬虫实战. 1.安 ...
- python 爬取豆瓣某一主题书单_Python爬虫 || 使用requests和xpath爬取豆瓣Top250书单内容全解。...
昨天,我们了解了如何爬取豆瓣某一个电影固定的位置信息,包含电影名称.导演.演员及评分等,今天我们来了解一下如何爬取豆瓣Top250书单,并如何将爬取到的内容存放到本地. 废话不多说了,shou my ...
- [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息
这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...
- Python爬虫初探(九)——爬虫之Beautifulsoup4实战(爬取豆瓣信息)
前面两章咱们介绍了Beautifuisoup4模块的简单使用,今天就用它来爬取豆瓣信息.话不多说,咱们开始吧. 一.拿到url地址 二.获取豆瓣数据 三.保存文件 需求: 爬取标题.评分.详情页的地址 ...
- Python网络爬虫:利用正则表达式方法爬取‘’豆瓣读书‘’中‘’新书速递‘’条目
1.简述:正则表达式是爬虫的方法之一,这里利用Requests库进行爬取,尽管Urllib也能进行爬取,但过程过于繁琐,在了解Urllib的爬取过程后,没有进行实战演练,但在学习了Requests的爬 ...
- python爬豆瓣电视剧_python requests库爬取豆瓣电视剧数据并保存到本地详解
首先要做的就是去豆瓣网找对应的接口,这里就不赘述了,谷歌浏览器抓包即可,然后要做的就是分析返回的json数据的结构: https://movie.douban.com/j/search_subject ...
最新文章
- ArcEngine的ToolbarControl解析
- Linux界面自动化测试框架不完全汇总
- MPI编程及性能优化
- Xcode8打包上传后构建版本消失问题
- Android 编译系统分析(一)
- 微信红包系统架构的设计和优化分享
- python学习之数据类型(int,bool,str)
- 1-3移动均线交叉策略2
- python工资一般多少p-为什么这么多人喜欢Python?Python的就业方向是什么?
- qtextedit改变单个字的颜色_孩子从“妈妈”叫到“妈”,称呼少了一个字,暗示孩子三方面变化...
- linux用户间文件互传,linux之间的文件互传-scp命令
- UML建模:基于智慧校园的二手交易平台
- 万特电能表接线仿真系统 软件_电工技能——分享一款超实用的电工仿真教学接线Flash动画软件...
- 深入解密比Guava Cache更优秀的缓存-Caffeine
- 伯努利试验及n重伯努利试验
- OSChina 周日乱弹 —— 我们今天不上班!
- the little scheme 代码
- Spring Data JPA 4.方法定义规范
- Java 随手写的一个英语单词练习器
- 奥比中光再度携手英伟达联合举办第三届3D视觉创新应用竞赛
热门文章
- ASP.NET 3.5中客户端回发及回调
- 再谈谈ADO.NET Data Service
- 提示cannot instantiate abstract class due to following members?
- POJ3254Corn Fields——状态压缩dp
- HDU_oj_2046 骨牌铺方格
- light_oj 1236 求最小公倍数( lcm(a,b) )等于n的数对 素因数分解
- 各浏览器中的鼠标滚轮事件处理
- DataSnap服务器从xe2升级到xe5报错的处理
- MFC初探 —— 设置软件开机自启
- Visual Stdio下安装WTL的向导Widzard