pythonscrapy爬⾍实例_Python爬⾍:Scrapy实例(⼀)
原标题:Python 爬⾍:Scrapy 实例(⼀)
1、创建Scrapy项⽬
似乎所有的框架,开始的第⼀步都是从创建项⽬开始的,Scrapy也不例外。在这之前要说明的是Scrapy项⽬的创建、配置、运⾏……默认都是在终端下操作的。不要觉得很难,其实它真的⾮常简单,做填空题⽽已。如果实在是⽆法接受,也可以花点⼼思配置好Eclipse,在这个万能IDE下操作。推荐还是在终端操作⽐较好,虽然开始可能因为不熟悉⽽出现很多错误,错多了,通过排错印象深刻了,也就⾃然学会了。打开Putty连接到Linux,开始创建Scrapy项⽬。执⾏命令:
cd
cd code/scrapy/
scrapy startproject todayMovie
linux服务器可提供的服务tree todayMovie
执⾏结果如图1所⽰。
图1 创建todayMovie项⽬
tree命令将以树形结构显⽰⽂件⽬录结构。tree命令默认情况下是没有安装的,可以执⾏命令apt-get install tree来安装这个命令。
这⾥可以很清楚地看到todayMovie⽬录下的所有⼦⽂件和⼦⽬录。⾄此Scrapy项⽬todayMovie基本上完成了。按照Scrapy的提⽰信息,可以通过Scrapy的Spider基础模版顺便建⽴⼀个基础的。相当于把填空题打印到试卷上,等待填空了。当然,也可以不⽤Scrapy命令建⽴基础,如果⾮要体验⼀下DIY也是可以的。这⾥我们还是怎么简单怎么来吧,按照提⽰信息,在该终端中执⾏命令:
cd todayMovie
scrapy genspider wuHanMovieSpider mtime
执⾏结果如图2所⽰。python在线编辑器python3
图2 创建基础爬⾍
⾄此,⼀个最基本的项⽬已经建⽴完毕了,它包含了⼀个Scrapy所需的基础⽂件。到这⼀步可以说填空题已准备完毕,后⾯的⼯作就纯粹是填空了。图2中第⼀⾏⽂字scrapy genspider是⼀个命令,也是Scrapy最常⽤的⼏个命令之⼀,它的使⽤⽅法如图3所⽰。
图3 scrapy genspider命令帮助
因此,刚才的命令意思是使⽤scrapy genspider命令创建⼀个名字为wuHanMovieSpider的爬⾍脚本。这个脚本搜索的域为
mtime。
2、Scrapy⽂件介绍
Scrapy项⽬的所有⽂件都已经到位了,如图2所⽰,下⾯来看看各个⽂件的作⽤。⾸先最顶层的那个todayMovie⽂件夹是项⽬名,这个没什么好说的。
在第⼆层中是⼀个与项⽬同名的⽂件夹todayMovie和⼀个⽂件scrapy.cfg,这⾥与项⽬同名的⽂件夹todayMovie是模块(也可以叫做包的),所有的项⽬代码都在这个模块(⽂件夹或者叫包)内添加。⽽scrapy.cfg⽂件,顾名思义它是整个Scrapy项⽬的配置⽂件。来看看这个⽂件⾥有些什么。Scrapy.cfg⽂件内容如下:
1 # Automatically created by: scrapy startproject
2 #
3 # For more information about the [deploy] section see:
5
6 [settings]
7 default = todayMovie.settings
8
9 [deploy]
11 project = todayMovie
除去以“#”为开头的注释⾏,整个⽂件只声明了两件事:⼀是定义默认设置⽂件的位置为todayMovie模块下的settings⽂件,⼆是定义项⽬名称为todayMovie。
在第三层中有6个⽂件和⼀个⽂件夹(实际上这也是个模块)。看起来很多。实际上有⽤的也就3个⽂件,分别是items.py、pipelines.py、settings.py。其他的3个⽂件中,以pyc结尾的是同名程序编译得到的字节码⽂件,settings.pyc是settings.py的字节码⽂
件,__init__.pyc是__init__.py的字节码⽂件。据说⽤来加快程序的运⾏速度,可以忽视。⾄于__init__.py⽂件,它是个空⽂件,⾥⾯什么都没有。在此处唯⼀的作⽤就是将它的上级⽬录变成了⼀个模块。也就是说第⼆层的todayMovie模块下,如果没有__init__.py⽂件。那么todayMovie就只是⼀个单纯的⽂件夹。在任何⼀个⽬录下添加⼀个空的__init__.py⽂件,就会将该⽂件夹模块化,可以供导⼊使⽤。
有⽤的这3个⽂件中。settings.py是上层⽬录中scrapy.cfg定义的设置⽂件。settings.py的内容如下:
1 # -*- coding: utf-8 -*-
2
3 # Scrapy settings for todayMovie project
4 #
5 # For simplicity, this file contains only settings considered importantor
6 # commonly used. You can find more settings consulting thedocumentation:
7 #
11
12 BOT_NAME = 'todayMovie'
13
14 SPIDER_MODULES = ['todayMovie.spiders']
15 NEWSPIDER_MODULE = 'todayMovie.spiders'
16
17
18 # Crawl responsibly by identifying yourself (and your website) on the
user-agent
20
21 # rules
22 ROBOTSTXT_OBEY = True
items.py⽂件的作⽤是定义爬⾍最终需要哪些项,items.py的内容如下:
1 # -*- coding: utf-8 -*-
2
3 # Define here the models for your scraped items
5 # See documentation in:
7
8 import scrapy
9
10
简述hibernate框架11 class TodaymovieItem(scrapy.Item):
12 # define the fields for your item here like:
13 # name = scrapy.Field
14 pass
pipelines.py⽂件的作⽤是扫尾。Scrapy爬⾍爬取了⽹页中的内容后,这些内容怎么处理就取决于pipelines.py如何设置了。pipeliens.py ⽂件内容如下:
1 # -*- coding: utf-8 -*-
2
3 # Define your item pipelines here
4 #
5 # Don't forget to add your pipeline to the ITEM_PIPELINES setting
7
8
9 class TodaymoviePipeline(object):
10 def process_item(self, item, spider):
11 return item
第⼆层中还有⼀个spiders的⽂件夹。仔细看⼀下,在该⽬录下也有个__init__.py⽂件,说明这个⽂件夹也是⼀个模块。在该模块下是本项⽬中所有的爬⾍⽂件。
第三层中有3个⽂件,__init__.py、__init__.pyc、wuHanMovieSpider.py。前两个⽂件刚才已经介绍过了,基本不起作⽤。wuHanMovieSpider.py⽂件是刚才⽤scrapy genspider命令创建的爬⾍⽂件。wuHanMovieSpider.py⽂件内容如下:
1 # -*- coding: utf-8 -*-
2 import scrapy
3
4
5 class WuhanmoviespiderSpider(scrapy.Spider):
6 name = "wuHanMovieSpider"
7 allowed_domains = ["mtime"]
8 start_urls = (
9 'ime/',
11
12 def parse(self, response):
js 字符串转数字数组13 pass
在本次的爬⾍项⽬⽰例中,需要修改、填空的只有4个⽂件,它们分别是items.py、settings.py、pipelines.py、wuHanMovieSpider.py。其中items.py决定爬取哪些项⽬,wuHanMovieSpider.py决定怎么爬,settings.py决定由谁去处理爬取的内容,pipelines.py决定爬取后的内容怎样处理。
3、Scrapy爬⾍编写
My first scrapy crawl怎么简单,怎么清楚就怎么来。这个爬⾍只爬取当⽇电影名字,那我们只需要在⽹页中采集这⼀项即可。
(1)选择爬取的项⽬items.py
修改items.py⽂件如下:
1 # -*- coding: untf-8 -*-
2
3 # Define here the models for your scraped items
4 #
5 # See documentation in:
7
8 import scrapy
9
10
11 class TodaymovieItem(scrapy.Item):
12 # define the fields for your item here like:
13 # name = scrapy.Field
14 #pass
15 movieTitleCn = scrapy.Field #影⽚中⽂名
16 movieTitleEn = scrapy.Field #影⽚英⽂名
17 director = scrapy.Field #导演
18 runtime = scrapy.Field #电影时长
由于中严格的格式检查。中最常见的异常Indentati会经常出现。如果使⽤的编辑器是vi或者vim,强烈建议修改vi的全局配置⽂
件/etc/vim/vimrc,将所有的4个空格变成tab。
与最初的items.py⽐较⼀下,修改后的⽂件只是按照原⽂的提⽰添加了需要爬取的项⽬,然后将类结尾的pass去掉了。这个类是继承与Scrapy的Iteam类,它没有重载类的__init__的解析,没有定义新的类,只定义了类成员。
html5替换iframe的标签(2)定义怎样爬取wuHanMovieSpider.py
修改spiders/wuHanMovieSpider.py,内容如下:
1 # -*- coding: utf-8 -*-
2 import scrapy
3 from todayMovie.items import TodaymovieItem
4 import re
5
6
7 class WuhanmoviespiderSpider(scrapy.Spider):
8 name = "wuHanMovieSpider"
9 allowed_domains = ["mtime"]
10 start_urls = [
11 'ime/China_Hubei_Province_Wuhan_Wuchang/4316/',
12 ] #这个是武汉汉街万达影院的主页
13
14
15 def parse(self, response):
16 selector =response.xpath('/html/body/[3]/text')[0].extract
17 moviesStr = re.search('"movies":[.*?]', selector).group
18 moviesList = re.findall('{.*?}', moviesStr)
19 items = []
20 for movie in moviesList:
21 mDic = eval(movie)
22 item = TodaymovieItem
23 item['movieTitleCn'] = ('movieTitleCn')
24 item['movieTitleEn'] = ('movieTitleEn')
25 item['director'] = ('director')
26 item['runtime'] = ('runtime')
27 items.append(item)
28 return items
在这个⽂件中,⾸先导⼊了scrapy模块,然后从模块(包)todayMovie中的items⽂件中导⼊了Todaymov
ieItem类,也就是刚才定义需要爬⾏内容的那个类。WuhanmovieSpider是⼀个⾃定义的类,它是由scrapy genspider命令⾃动⽣成的。这个⾃定义类继承于
scrapy.Spider类。第8⾏的name定义的是名。第9⾏的allowed_domains定义的是域范围,也就是说该只能在这个域内爬⾏。第11⾏的start_urls定义的是爬⾏的⽹页,这个只需要爬⾏⼀个⽹页,所以在这⾥start_urls可以是⼀个元组类型。如果需要爬⾏多个⽹页,最好使⽤列表类型,以便于随时在后⾯添加需要爬⾏的⽹页。
类中的parse函数需要参数response,这个response就是请求⽹页后返回的数据。⾄于怎么从response中选取所需的内容,⼀般采取两种⽅法,⼀是直接在⽹页上查看⽹页源代码,⼆是⾃⼰写个Python 3程序使⽤quest将⽹页返回的内容写⼊到⽂本⽂件中,再慢慢地查询。
打开Chrome浏览器,在地址栏输⼊爬取⽹页的地址,打开⽹页。
>html怎么设置文本框大小
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论