id97下电影
我们本次要爬取的网站:http://www.id97.com/movie
1、打开终端:scrapy startproject movieprject
2、scrapy genspider movie
形成的目录结构如下:
第19行:
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
第22行:
ROBOTSTXT_OBEY = False
第67-69行:
ITEM_PIPELINES = {
'movieproject.pipelines.MovieprojectPipeline': 300,
}
4、items数据
获取第一个页面的数据:
海报
名字
豆瓣评分
电影类型(什么类型)
第二个页面的数据:
导演
编剧
代码如下:
import scrapy
class MovieprojectItem(scrapy.Item):
# define the fields for your item here like:
# 电影海报
post = scrapy.Field()
# 电影名字
name = scrapy.Field()
# 豆瓣评分
score = scrapy.Field()
# 电影类型
_type = scrapy.Field()
# 导演
director = scrapy.Field()
# 编剧
editor = scrapy.Field()
# 主演
actor = scrapy.Field()
# 片长
long_time = scrapy.Field()
# 介绍
introduce = scrapy.Field()
# 下载链接
# download_url = scrapy.Field()
5、movie.py
def parse()
首先找到所有的div
遍历div依次找到每一个信息
①创建一个item
②获取海报
③获取电影的名字(在图片里面有名字)
④获取评分的xpath路径,把空格与-干掉
⑤获取类型(在第4天讲过拼接两个类型,会把一个div里面的内容拼接到一起)
还有其他信息、要去下一页获取
①获取详细页面链接:
②向详情页发送请求yield ,通过meta将item传递给下面的函数:meta={‘键随便指定’,‘传递的直为item’}
def parse_detail()
①通过request怎么传递item
item=response.meta['item']
②获取导演信息,用response.xpath获取
③获取编制
④获取演员(空格去掉)
⑤片长 long_time
⑥电影介绍
yield item
代码如下:
def parse_detail(self, response):
# 通过response的meta属性,获取到参数item
item = response.meta['item']
item['director'] = response.xpath('//div[@class="col-xs-8"]/table/tbody/tr[1]/td[2]/a/text()').extract_first()
item['editor'] = response.xpath('//div[@class="col-xs-8"]/table/tbody/tr[2]/td[2]/a/text()').extract_first()
# '张静初 / 龙品旭 / 黎兆丰 / 王同辉 / 张国强 / 叶婉娴 / 丽娜 / 吴海燕 / 吴若林 / 喻引娣 显示全部'
item['actor'] = response.xpath('//div[@class="col-xs-8"]/table/tbody/tr[3]/td[2]').xpath('string(.)').extract_first().replace(' ', '').replace('显示全部', '')
# 片长
lala = response.xpath('//div[@class="col-xs-8"]/table/tbody/tr[8]/td[2]/text()').extract_first()
if lala and ('分钟' in lala):
item['long_time'] = lala
else:
item['long_time'] = ''
# 电影介绍
item['introduce'] = response.xpath('//div[@class="col-xs-12 movie-introduce"]').xpath('string(.)').extract_first().replace('\u3000', '').replace('展开全部', '')
# 电影链接
# item['download_url'] = response.xpath('')
yield item
看到下面的东西、证明爬取成功了:
最后会生成这么一个文件~
注意:因为本网站找不到迅雷下载的网址,所以无法实现下载,如果有学习者能够找到办法。望告知!谢谢!