爬豆瓣上映电影及所有影院信息

浏览: 112

看大家都爬豆瓣,我就试着也弄一下

分析豆瓣正在上映的电影的URL的时候,发现xhr里有个链接的返回值是影院信息,正好都弄下来,写入到Excel中。

其中没有对代码做容错机制,没有优化代码!

其中爬取的电影的详情链接里有对电影的进一步描述,后续有时间写个循环都爬下来。

在线购票的链接,F12后查看XHR --当前请求的信息和服务器响应的信息,有个对应json包含了所有的信息



上一下出来的数据

image.png

image.png

代码:

# -*- coding: utf-8 -*-
#爬取豆瓣电影北京正在上映电影的所有电影信息及所有电影院信息

__author__ = 'isme'

import urllib.request
from bs4 import BeautifulSoup
import gzip
import xlwt
import json


#正在上映
url = 'https://movie.douban.com/cinema/nowplaying/beijing/'
#北京所有影院(?后边的id值可调成所有城市的id)
url_yy = 'https://movie.douban.com/j/cinema/cinemas/?city_id=108288'

Cookie = '''
ll="108288"; bid=wKX07fA2ZYg; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1510021150%2C%22https%3A%2F%2Fwww.douban.com%2F%22%5D;
__yadk_uid=PweZIpbaUi0WN3tKwUO5zzbkeJA2utJv; _vwo_uuid_v2=D26FE17D6BEDFEF32CD1557D15909333|4dafd76f183ded26598d57fd840f7de7;
ct=y; _pk_id.100001.4cf6=aaa017f932668599.1510021150.1.1510022335.1510021150.; __utma=30149280.1018690506.1503653394.1509086343.1510021148.9;
__utmc=30149280; __utmz=30149280.1510021148.9.3.utmcsr=baidu|utmccn=(organic)|utmcmd=organic;
__utma=223695111.1567841269.1510021150.1510021150.1510021150.1; __utmc=223695111;
__utmz=223695111.1510021150.1.1.utmcsr=douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/
'''
headers = {
'User-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.366',
'Cookie': Cookie,
'Connection': 'Keep-Alive',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.8',
'Host': 'movie.douban.com',
'Referer': 'https://movie.douban.com/'
}

#上映影片
req = urllib.request.Request(url = url, headers = headers)
res = urllib.request.urlopen(req)
data = res.read()
data = gzip.decompress(data).decode('utf-8')

#播放影院
req_yy = urllib.request.Request(url = url_yy, headers = headers)
res_yy = urllib.request.urlopen(req_yy)
data_yy = res_yy.read()
data_yy = gzip.decompress(data_yy).decode('utf-8')

#电影信息
pageSource = BeautifulSoup(data,'lxml')
#影院信息
jdata = json.loads(data_yy)
# 新建一个excel文件
wb = xlwt.Workbook()
# 创建工作薄
ws = wb.add_sheet('正在上映')
#写入标题
ws.write(0,0,'序号')
ws.write(0,1,'ID')
ws.write(0,2,'电影名')
ws.write(0,3,'上映日期')
ws.write(0,4,'时长')
ws.write(0,5,'地域')
ws.write(0,6,'导演')
ws.write(0,7,'主演')
ws.write(0,8,'评分')
ws.write(0,9,'评论数')
ws.write(0,10,'详情链接')
i = 1
for li in pageSource.find_all(name= 'li',attrs = {'data-category':'nowplaying'}):
# 往单元格中写数据write(序号,id,电影名,上映日期,时长,地域,导演,主演,评分,评论数,详情链接)
ws.write(i,0,i)
ws.write(i,1,li['id'])
ws.write(i,2,li['data-title'])
ws.write(i,3,li['data-release'])
ws.write(i,4,li['data-duration'])
ws.write(i,5,li['data-region'])
ws.write(i,6,li['data-director'])
ws.write(i,7,li['data-actors'])
ws.write(i,8,li['data-score'])
ws.write(i,9,li['data-votecount'])
ws.write(i,10,li.ul.li.a['href'])
i += 1

# 创建工作薄
ws = wb.add_sheet('影院信息')
#写入标题
ws.write(0,0,'序号')
ws.write(0,1,'ID')
ws.write(0,2,'电影院名')
ws.write(0,3,'地址')
ws.write(0,4,'联系方式')
ws.write(0,5,'详情链接')
#处理影院信息

for i in range(0,len(jdata)):
ws.write(i+1,0,i+1)
ws.write(i+1,1,jdata[i]['id'])
ws.write(i+1,2,jdata[i]['name'])
ws.write(i+1,3,jdata[i]['address'])
ws.write(i+1,4,jdata[i]['telephone'])
ws.write(i+1,5,jdata[i]['url'])

# 保存excel
newexcle=r"D:\python学习笔记\爬虫\保存记录\11_豆瓣\yp.xls"
wb.save(newexcle)




推荐 2
本文由 KGdom 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册