- 积分
- 3638
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-10-21
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2020-12-17 14:44:34
|
显示全部楼层
二、文件注解
生成的文件中,需要改的是4个: settings.py | pipelines.py | items.py | wuHanMovieSpider.py |
2.1 settings.py
BOT_NAME = 'todayMovie'
SPIDER_MODULES = ['todayMovie.spiders']
NEWSPIDER_MODULE = 'todayMovie.spiders'
ROBOTSTXT_OBEY = True
ITEM_PIPELINES = {'todayMovie.pipelines.TodaymoviePipeline': 300}#ITEM_PIPELINES字典,键是处理结果的类,值是这个类执行的顺序
#这里只有一种处理方式,值无所谓
#如果需要多种处理方法,就要确定顺序了,值越小越先执行
2.2 items.py
# 决定爬取哪些项目
import scrapy
class TodaymovieItem(scrapy.Item):
movieTitleCn = scrapy.Field()#影片中文名
movieTitleEn = scrapy.Field()#影片英文名
director = scrapy.Field()#导演
runtime = scrapy.Field()#电影时长
2.3 pipelines.py
# 决定爬取的内容怎么处理
#item来自wuHanMovieSpider的返回值,
#返回值是列表items,在这里只能逐个写入,所以是追加写入
import codecs
class TodaymoviePipeline(object):
def process_item(self, item, spider):
with codecs.open('当日电影表.txt', 'a+', 'utf-8') as fp:
fp.write('%s %s %s %s \r\n'
%(item['movieTitleCn'],
item['movieTitleEn'],
item['director'],
item['runtime']))
2.4 wuHanMovieSpider.py
import scrapy
import re
from todayMovie.items import TodaymovieItem #即items.py
class WuhanmoviespiderSpider(scrapy.Spider):
name = 'wuHanMovieSpider' #name定义爬虫名
allowed_domains = ['mtime.com'] #定义爬行的域范围,爬虫只在这个域爬行
start_urls = ['http://theater.mtime.com/China_Hubei_Province_Wuhan_Wuchang/4316/']
# 爬行的网页,这个爬虫只需要爬一个网页,如果需要爬多个网页,start_urls列表写多个元素
#parse=解析
def parse(self, response):
#response参数是请求网页后返回的数据
#观察网页代码,第3个script中的文本有电影信息:
selector = response.xpath('/html/body/script[3]/text()')[0].extract()
print(selector)
moviesStr = re.search('"movies":\[.*?\]', selector).group()
moviesList = re.findall('{.*?}', moviesStr)
items = []
for movie in moviesList:
mDic = eval(movie) #网页代码的写法正好类似python写法
item = TodaymovieItem()
item['movieTitleCn'] = mDic.get('movieTitleCn')
item['movieTitleEn'] = mDic.get('movieTitleEn')
item['director'] = mDic.get('director')
item['runtime'] = mDic.get('runtime')
items.append(item)
return items
|
|