爬取猫眼电影排行榜TOP100数据 --存入csv

爬取猫眼电影网站电影排行榜TOP100数据 --存入csv

流程
  1. 确认页面是动态还是静态:在源码搜索关键字看是否能找到
  2. 查看排行榜页面查询字符串中翻页的规律:规律为:offset=(page-1)*10
  3. 进入页面源码:右键点击查看元素,复制下需求数据的标签块,如下
<p class="name"><a href="/films/1228" title="天空之城" data-act="boarditem-click" data-val="{movieId:1228}">天空之城</a></p>
        <p class="star">
                主演:寺田农,鹫尾真知子,龟山助清
        </p>
<p class="releasetime">上映时间:1992-05-01</p>
  1. 写出re:想要的数据为:电影名&朱颜&上映时间
<p class="name">.*?title="(.*?)".*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>    
  1. 爬虫代码
from urllib import request
from fake_useragent import UserAgent
from time import sleep
import re
import csv

class MaoyanSpider(object):
	#定义常用变量
	def __init__(self):
		self.url = 'https://maoyan.com/board/4?offset={}'
		#计数加了多少条数据
		self.i = 0

	#发请求,url得从run()中传进来
	def get_html(self,url):
		#包装请求头
		headers = {'User-Agent':UserAgent().random}
		req = request.Request(url=url,headers=headers)
		#发请求
		resp = request.urlopen(req)
		#读取数据
		html = resp.read().decode(utf-8)
		return html

	#解析函数,用正则解析提取到的页面数据
	def parse_html(self,html):
		#创建编译对象
		re_bds = '<p class="name">.*?title="(.*?)".*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>'
  		pattern = re.compile(re_bds,re.S)
		#用编译对象进行正则匹配
  		r_list = pattern.findall(html)
  		print(r_list)

	#保存文件函数,使用csv文件的多行写入[(),(),()]
	def save_html(self,r_list):
		#将数据先存到列表中,再一次性写入,减少IO
		L = []
		with open ('film.csv','a') as f:
			#创建csv写入对象
			writer = csv.writer(f)
			for r in r_list:
				# r 数据格式 ('名称',' 主演 ','上映时间:1993-01-01')
				row = (r[0],
				       r[1].strip(),
				       r[2].strip()[5:15]
					 )
				L.append(row)
				#计数
   			        self.i += 1

			writer.writerows(L)
			#写入后自动关闭
			#最终写入格式:音乐之声 主演:朱莉·安德鲁斯,克里斯托弗·普卢默,埃琳诺·帕克 1965-03-02  。。。
					
	#入口函数
	def run(self):
		#编码
		#此案例无需编码

		begin = int(input('请输入起始页:'))
		end = int(input('请输入终止页:'))
		
		for page in range(begin,end+1):
			#拼接url
			url = self.url.format((page-1)*10)
	
			#用实例调用发送请求的函数,并传入url,接受返回值html
			html = self.get_html(url)
	
			#数据处理,用实例对象调用解析函数解析爬到的数据,并传入原数据,得到最终数据
			r_list = self.parse_html(html)
			# r_list 数据格式:
			#[('名称',' 主演 ','上映时间:1993-01-01'),('名称',' 主演 ','上映时间:1993-01-01'),...]

			self.save_html(r_list)
			
			#设置读取的间隔时间
			time.sleep(random.uniform(0,1))
		print('数据数量:',self.i)
	
if __name__ == '__main__':
	#计算爬取用时
	start =time.time()
	
	spider = MaoyanSpider()
	spider.run()
	
	end = time.time()
	print('执行时间:%.2f' % (end-start))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值