(1)每个电影的电影名、导演、编剧、主演、类型、国家、上映日期、片长,电影评分,以及每个星级评分的百分比数据。

(2)每个电影热门点评中的前100个评分及其评分人。

(3)进入每个评分人的主页,爬取其看过的电影信息,以及对电影的评分。(少于300部则全部爬取,多于300部则仅爬取前300个)

将上述数据均写入数据库。三张表:电影信息,用户(用户名、主页),用户对电影的评分表。写入数据时要注意电影与用户的去重。

一、创建项目,创建 spiders

二、修改配置文件

三、进入浏览器查看华语、欧美、韩国、日本电影每个标签下按评价排序的全部电影的url

华语url:page_start=0的值可以自己设定

https://movie.douban.com/explore#!type=movie&tag=%E5%8D%8E%E8%AF%AD&sort=rank&page_limit=20&page_start=0

欧美url:

https://movie.douban.com/explore#!type=movie&tag=%E6%AC%A7%E7%BE%8E&sort=rank&page_limit=20&page_start=0

韩国url:

https://movie.douban.com/explore#!type=movie&tag=%E9%9F%A9%E5%9B%BD&sort=rank&page_limit=20&page_start=0

日本url:可见只有tag=的值不同

https://movie.douban.com/explore#!type=movie&tag=%E6%97%A5%E6%9C%AC&sort=rank&page_limit=20&page_start=0

四、提取每个电影链接,可利用浏览器插件Xpath-helper快速完成。

五、点击进入链接,提取每个电影的详细信息

电影名    //h1/span[@property]

导演     //div[@id='info']//span[@class='attrs']/a[@rel]

编剧     //div[@id='info']//span[@class="attrs"]取第二个元素就是编剧了

全部演员    //div[@id='info']//span[@class]/a[@rel='v:starring']

类型   //div[@id='info']//span[@property='v:genre']

国家   //div[@id='info'],先把全部取出来,再找国家信息

上映时间  //div[@id='info']//span[@property='v:initialReleaseDate']

时长   //div[@id='info']//span[@property='v:runtime']

豆瓣评分  //strong

分数百分比  //div[@class='ratings-on-weight']/div/span

六,到目前为止看似这个方法行的通,但是电影信息是以json格式传过来的,用xpath提取电影链接失败。在审查元素时我们可以看到请求地址https://movie.douban.com/j/search_subjects?

七、上代码

# -*- coding: utf-8 -*-
import scrapy
import json
from NewDouBan.items import MovieInfo
from urllib import urlencode
class NewDouBan(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com']
    data = {
        'type': 'movie',
        'tag': '热门',
        'sort': 'recommend',
        'page_limit': 20,
        'page_start': 0
    }
    start_urls = ['https://movie.douban.com/j/search_subjects?' + urlencode(data)]
    #start_urls = ['https://movie.douban.com/explore#!type=movie&tag=爱情&sort=recommend&page_limit=20&page_start=40']
    #https: // movie.douban.com / explore  # !type=movie&tag=%E7%83%AD%E9%97%A8&sort=rank&page_limit=20&page_start=0

def parse(self, response):
        # type:
        # tag: 爱情
        # sort: recommend
        # page_limit: 20
        # page_start: 40
        # 取出每个页面里帖子链接列表
        #详细信息link// div[@class ="gaia"]//a[@class ="item"]/@href
        #

# links = response.xpath('//div[@class ="gaia"]//a[@class ="item"]/@href').extract()
        # print "ssssssssss"+str(links)+response.url
        # # 迭代发送每个帖子的请求,调用parse_item方法处理
        # for link in links:
        #     print link
        #     yield scrapy.Request(link, callback=self.parse_item)

data = json.loads(response.text)["subjects"]
        for each in data:

url2=each['url']
            #print "uuuuuuuuuu"+url2

yield scrapy.Request(url2, callback=self.parse_item)

# 处理每个帖子里
    def parse_item(self, response):

item = MovieInfo()
        # 标题

# name = scrapy.Field()
        # director = scrapy.Field()
        # adaptor = scrapy.Field()
        # rolename = scrapy.Field()
        # type = scrapy.Field()
        # country = scrapy.Field()
        # date = scrapy.Field()
        # length = scrapy.Field()
        # grade = scrapy.Field()
        # startrate = scrapy.Field()
        item['name'] =response.xpath("//h1/span[@property]/text()").extract()[0]
        item['rolename']=response.xpath("//div[@id='info']//span[@class]/a[@rel='v:starring']/text()").extract()
        # 编号 
        #item['director'] = response.xpath("//div[@id='info']//span[@class='attrs']/a[@rel]/text()").extract()
        #item['type']=response.xpath("//div[@id='info']//span[@property='v:genre']/text()").extract()
        country=response.xpath("//div[@id='info']").extract()
        #for coun in country:

item['country']=country
        print "sssssss:"+country
        # item['date']=response.xpath("//div[@id='info']//span[@property='v:initialReleaseDate']/text()").extract()
        # item['length']=response.xpath("//div[@id='info']//span[@property='v:runtime']/text()").extract()
        # item['grade']=response.xpath("//strong/text()").extract()
        start=response.xpath("//div[@class='ratings-on-weight']/div/span/text()").extract()
        list=[]
        for it in start:
            list.append(it.replace("\n", "").replace(" ",""))
        item['startrate']=list
        # 链接
        item['url'] = response.url
        #print item
        yield item

管道文件代码

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

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

import json
class NewdoubanPipeline(object):

count = 0

def __init__(self):
        self.filename = open("douban.json", "w")
        # import codecs
        # self.filename=codecs.open("dongguan.json","w",encoding="utf-8")

def process_item(self, item, spider):
        print 'nnnnnnnnnnnnnnn'
        self.count += 1
        text = str(self.count) + json.dumps(dict(item), ensure_ascii=False) + '\n'
        self.filename.write(text.encode("utf-8"))
        return item

def close_spider(self, spider):
        self.filename.close()

类文件代码

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

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy

class MovieInfo(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    #电影的电影名、导演、编剧、主演、类型、国家、上映日期、片长,电影评分,以及每个星级评分的百分比数据。
    name=scrapy.Field()
    director=scrapy.Field()
    adaptor=scrapy.Field()
    rolename=scrapy.Field()
    type=scrapy.Field()
    country=scrapy.Field()
    date=scrapy.Field()
    length=scrapy.Field()
    grade=scrapy.Field()
    startrate=scrapy.Field()
    url=scrapy.Field()

爬取豆瓣电影中:华语、欧美、韩国、日本电影每个标签下按评价排序的全部电影。相关推荐

  1. python——利用正则表达式爬取豆瓣读书中的图书信息

    本来可以使用一条正则表达式完成图书信息的爬取,结果发现在CPU性能较差的电脑上进行爬取时耗时非常长,几乎无法将结果获取到.所以,将大的html源码先经过一次简单的匹配以获取到一个中间结果,然后再从中间 ...

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

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

  3. 利用Python中的BeautifulSoup库爬取豆瓣读书中书本信息

    利用BeautifulSoup库,获取前250本图书的信息,需要爬取的信息包括书名.书名的URL链接.作者.出版社和出版时间.书本价格.评分和评论,把这些信息存到txt文件,要求将这些信息对齐,排列整 ...

  4. python实践 爬取豆瓣各个标签的电影 爬虫

    python实践 爬取豆瓣各个标签的电影 实践题目 爬取豆瓣电影中,华语.欧美.韩国.日本电影每个标签下按评价排序的全部电影,需要如下信息: (1)每个电影的电影名.导演.编剧.主演.类型.国家.上映 ...

  5. python实现爬虫探探_全栈 - 9 实战 爬取豆瓣电影数据

    这是全栈数据工程师养成攻略系列教程的第九期:9 实战 爬取豆瓣电影数据. 掌握了爬虫的基本原理和代码实现,现在让我们通过实战项目巩固一下. 确定目标 在写爬虫之前应当想清楚:我需要哪方面的数据?需要包 ...

  6. Python实战:爬取豆瓣电影

    春天来了,万物复苏,很多学生都要做课设项目了,又到了码农们爬虫的季节,空气中弥漫着一阵阵激情的交流声! 一.通用思路 找到豆瓣电影的汇总页面,整个页面都是各种电影的信息(相当于一个列表,把电影摆到一起 ...

  7. python豆瓣历史评分_Python实战-爬取豆瓣top250评分高于指定值的电影信息

    思路 1. 要获得怎么样的数据 2. 找到数据来源 3. 模拟浏览器发送请求获得数据 4. 处理数据,保存数据 第一步: 在这里数据是豆瓣top250中高于指定分数的电影信息 信息有:名称,评分,格言 ...

  8. 爬去豆瓣网中电影信息并保存到本地目录当中

    爬取豆瓣网中电影信息并保存到本地目录当中 读者可以根据源代码来设计自己的爬虫,url链接不能通用,由于源代码中后续查找筛选中有不同类或者标签名,仅供参考,另外推荐b站上一个老师,叫路飞学城IT的,讲的 ...

  9. python爬虫——Cookie登录爬取豆瓣短评和影评及常见问题

    python爬虫--Cookie登录爬取豆瓣短评和影评 常见问题(本文已解决) 具体步骤 一.获取网页源码 短评.影评 二.解析网页源码及爬取评论 1.短评网页解析 ①确定位置 2.短评爬取 ①名称爬 ...

最新文章

  1. 如何在不停止程序的情况下打印完整的回溯?
  2. 计算机专业申请计算生物学,卡内基梅隆大学计算生物学硕士专业
  3. 管家婆有未记账的凭证怎么办_管家婆常见问题
  4. Vue之X-Templates的使用
  5. 增加外键时候的一个小错误
  6. Tips--解决安装完Anaconda没有快捷方式的问题
  7. python画版图_基于mask-RCNN的版图分析,MaskRCNN,版面
  8. 常用php操作redis命令整理(五)ZSET类型
  9. WSL2支持GPU使用docker
  10. hadoop和spark相关参数的配置
  11. 4.3 createjs
  12. 如何用ffmpeg给视频打水印
  13. 智能配电房综合监控系统 建设成效
  14. 结点电压法的c语言实现,节点电压法该如何理解_节点电压法例题
  15. C语言随机数独教程,C语言数独游戏的求解方法
  16. php里用钢笔画曲线,ps钢笔工具组怎么用 ps钢笔工具使用方法
  17. JAVA调用Excel公式和js判断选择计算有效集合
  18. matlab中alw,MATLAB环境下遗传算法优化工具箱的应用_刘万林
  19. 如何获取网站的ico图标
  20. Java log4j详细教程

热门文章

  1. 游戏应用市场APP软件下载平台网站源码手机版内附教程
  2. 2017-07-17 DBA日记,凭直觉发现CRSDG的磁盘问题及处理
  3. 上海贝尔光猫 I-120E-Q 的破解之一:开启telnet功能
  4. 【Vue3】创建Vue3.0脚手架工程的解决方法(图文)
  5. win7系统可以用于授时服务器吗,ntp授时(电脑授时服务器)
  6. 伯克利大学数据库作业实现SimpleDB
  7. Java中public等修饰符
  8. 第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 D题
  9. 计算机数字化图像的编码方法有哪些,图像数字化的过程包括那几个步骤?
  10. a标签target属性