哈罗有见面了,几天刚刚验收学校仿站项目,就来赶博客,上课赶得哦。
我的爬虫原则: 爬虫就要有礼貌,爬虫与反爬虫的战争
很奇妙。呸,很费精神。话不多说上代码
'''
这次是抓取豆瓣网的前100部高分影片
本代码作者:高佳乐
'''
import requests ##导入requests库
import json ##导入json库,对json的一个解析
import time ##还是那句话,爬虫要有礼貌
#######################################################定义一个类##############################################################################
class spring(): ##定义类,
def __init__(self): ##定义构造函数
self.start = 0 ##定义初始开始数
self.limit = 100 ##初始电影数量
self.type = 1 ##初始类型,下边是地址的url
self.url='https://movie.douban.com/j/chart/top_list?type='+str(self.type)+'&interval_id=100%3A90&action=&start='+str(self.start)+'&limit='+str(self.limit)
return
####################################################获取HTML#################################################################################
def html(self,url): ##定义一个获取html_text的方法封装
html = requests.get(url) ##html是获取url
html_text = html.text ##html_text是html的写出
html_text = json.loads(html_text) ##html_text是json解析再一次
# html_text = json.dumps(html_text,sort_keys=True,indent=4,ensure_ascii=False) ##格式化输出实验一遍
# for i in html_text: ##循环输出以便观看
# print(i)
return html_text ##返回json解析后的html_text格式
########################################################操作##################################################################################
def select(self): ##这个方法就是开始解析后的json的格式后然后获取电影的标题,封面,分数啥的。
##选择类型,上边的url是types切换数字的,type就是电影类型。
self.type = input('请输入要查询的代码,默认是纪录片:\n1-记录片,11-剧情,24-喜剧,5-动作,13-爱情,17-科幻,25-动画\n10-悬疑,19-惊悚,20-恐怖,23-短片,6-情色,26-同性,14-音乐,7-歌舞\n28-家庭,8-儿童,2-传记,4-历史,22-战争,3-犯罪,27-西部,16-奇幻\n15-冒险,12-灾难,29-武侠,30-古装,18-运动,31-黑色电影\n')
print('正在获取排行榜前100个电影资料。') ##输出提示,本来打算给一个好看的等待条的状态,结果有点问题先这样吧→_→
i=1 ##这开始就是等待条的代码
while i<5:
print('·',end='')
time.sleep(0.5)
i+=1
print() ##嘿,这是等待条的结束,可以忽略
url = self.url ##url是初始结构的url,通过上边type合成后的url
html_text = self.html(url) ##获取后的url的json的格式
for i in html_text: ##因为获取后的会是一个列表,列表里边是字典,所以要遍历输出字典
##分数和星星
rating = i['rating'] ##字典的访问方式,字典[键],下边也是
fenshu = rating[0] ##获取到的是列表用索引
xing = int(rating[1])/10
##第几个
rank = i['rank']
##封面
cover_url = i['cover_url']
##类型
types = i['types']
types = ','.join(types)
##地点
regions = i['regions']
regions = ''.join(regions)
##电影名字
title = i['title']
##详细地址
url = i['url']
##时间
release_date = i['release_date']
##评论人数
vote_count = i['vote_count']
##演员
actors = i['actors']
actors = ','.join(actors) ##这里的演员返回的是一个列表,因为是多个演员,所以用join的函数,用法就是:连接符.join.列表啥的,就是用连接符把列表里边的元素连接
##按格式输出喽
print('第%s个:\n封面:%s\n电影名:%s\n演员:%s\n%s-%s-%s\n星星:%s\n分数:%s\n评价人数:%s\n详情页面:%s'%(rank,cover_url,title,actors,release_date,regions,types,xing,fenshu,vote_count,url))
##分解线
print('\n','-'*200,'\n')
time.sleep(1) ##爬虫宗旨:有礼貌,慢慢爬
##########################################################################操作########################################################################
douban = spring()
douban.select()
终于要进入抓包解析动态页面的脚步了,和静态页面感觉很奇妙。
这会我也不太熟,就不多说啥了,怕误人子弟。
就到这里吧,砸门下次见面。
-
怎么可能,效果图还没放就再见,我没放文档里面,啊哈哈哈。
- 好了,现在,砸门下次再见吧。