爬取豆瓣电影中:华语、欧美、韩国、日本电影每个标签下按评价排序的全部电影。
(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()
爬取豆瓣电影中:华语、欧美、韩国、日本电影每个标签下按评价排序的全部电影。相关推荐
- python——利用正则表达式爬取豆瓣读书中的图书信息
本来可以使用一条正则表达式完成图书信息的爬取,结果发现在CPU性能较差的电脑上进行爬取时耗时非常长,几乎无法将结果获取到.所以,将大的html源码先经过一次简单的匹配以获取到一个中间结果,然后再从中间 ...
- Python网络爬虫:利用正则表达式方法爬取‘’豆瓣读书‘’中‘’新书速递‘’条目
1.简述:正则表达式是爬虫的方法之一,这里利用Requests库进行爬取,尽管Urllib也能进行爬取,但过程过于繁琐,在了解Urllib的爬取过程后,没有进行实战演练,但在学习了Requests的爬 ...
- 利用Python中的BeautifulSoup库爬取豆瓣读书中书本信息
利用BeautifulSoup库,获取前250本图书的信息,需要爬取的信息包括书名.书名的URL链接.作者.出版社和出版时间.书本价格.评分和评论,把这些信息存到txt文件,要求将这些信息对齐,排列整 ...
- python实践 爬取豆瓣各个标签的电影 爬虫
python实践 爬取豆瓣各个标签的电影 实践题目 爬取豆瓣电影中,华语.欧美.韩国.日本电影每个标签下按评价排序的全部电影,需要如下信息: (1)每个电影的电影名.导演.编剧.主演.类型.国家.上映 ...
- python实现爬虫探探_全栈 - 9 实战 爬取豆瓣电影数据
这是全栈数据工程师养成攻略系列教程的第九期:9 实战 爬取豆瓣电影数据. 掌握了爬虫的基本原理和代码实现,现在让我们通过实战项目巩固一下. 确定目标 在写爬虫之前应当想清楚:我需要哪方面的数据?需要包 ...
- Python实战:爬取豆瓣电影
春天来了,万物复苏,很多学生都要做课设项目了,又到了码农们爬虫的季节,空气中弥漫着一阵阵激情的交流声! 一.通用思路 找到豆瓣电影的汇总页面,整个页面都是各种电影的信息(相当于一个列表,把电影摆到一起 ...
- python豆瓣历史评分_Python实战-爬取豆瓣top250评分高于指定值的电影信息
思路 1. 要获得怎么样的数据 2. 找到数据来源 3. 模拟浏览器发送请求获得数据 4. 处理数据,保存数据 第一步: 在这里数据是豆瓣top250中高于指定分数的电影信息 信息有:名称,评分,格言 ...
- 爬去豆瓣网中电影信息并保存到本地目录当中
爬取豆瓣网中电影信息并保存到本地目录当中 读者可以根据源代码来设计自己的爬虫,url链接不能通用,由于源代码中后续查找筛选中有不同类或者标签名,仅供参考,另外推荐b站上一个老师,叫路飞学城IT的,讲的 ...
- python爬虫——Cookie登录爬取豆瓣短评和影评及常见问题
python爬虫--Cookie登录爬取豆瓣短评和影评 常见问题(本文已解决) 具体步骤 一.获取网页源码 短评.影评 二.解析网页源码及爬取评论 1.短评网页解析 ①确定位置 2.短评爬取 ①名称爬 ...
最新文章
- 如何在不停止程序的情况下打印完整的回溯?
- 计算机专业申请计算生物学,卡内基梅隆大学计算生物学硕士专业
- 管家婆有未记账的凭证怎么办_管家婆常见问题
- Vue之X-Templates的使用
- 增加外键时候的一个小错误
- Tips--解决安装完Anaconda没有快捷方式的问题
- python画版图_基于mask-RCNN的版图分析,MaskRCNN,版面
- 常用php操作redis命令整理(五)ZSET类型
- WSL2支持GPU使用docker
- hadoop和spark相关参数的配置
- 4.3 createjs
- 如何用ffmpeg给视频打水印
- 智能配电房综合监控系统 建设成效
- 结点电压法的c语言实现,节点电压法该如何理解_节点电压法例题
- C语言随机数独教程,C语言数独游戏的求解方法
- php里用钢笔画曲线,ps钢笔工具组怎么用 ps钢笔工具使用方法
- JAVA调用Excel公式和js判断选择计算有效集合
- matlab中alw,MATLAB环境下遗传算法优化工具箱的应用_刘万林
- 如何获取网站的ico图标
- Java log4j详细教程
热门文章
- 游戏应用市场APP软件下载平台网站源码手机版内附教程
- 2017-07-17 DBA日记,凭直觉发现CRSDG的磁盘问题及处理
- 上海贝尔光猫 I-120E-Q 的破解之一:开启telnet功能
- 【Vue3】创建Vue3.0脚手架工程的解决方法(图文)
- win7系统可以用于授时服务器吗,ntp授时(电脑授时服务器)
- 伯克利大学数据库作业实现SimpleDB
- Java中public等修饰符
- 第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 D题
- 计算机数字化图像的编码方法有哪些,图像数字化的过程包括那几个步骤?
- a标签target属性