二级爬取猫眼电影

爬取:电影名称+主演+时间+评论+保存图片到指定路径

from urllib import request
import re
import random
from day01_爬虫.useragents import ua_list
import os

class MaoyanSpider(object):
    def __init__(self):
        self.url="https://maoyan.com/board/4?offset={}"

    #获取响应内容
    def get_html(self,url):
        headers = {"User-Agent": random.choice(ua_list)}  # 随机获取请求头
        req = request.Request(url=url, headers=headers)
        res = request.urlopen(req)
        html = res.read()
        return html

    #解析提取数据
    def re_func(self,re_bds,html):
        pattern=re.compile(re_bds,re.S)
        r_list=pattern.findall(html)
        return r_list

    #获取想要的数据,爬取一级页面
    def parse_html(self,url):
        one_html=self.get_html(url).decode()
        re_bds='
.*?title=' \ '"(.*?)".*?href="(.*?)".*?class="star">(.*?)

.*?class="releasetime">(.*?)

'
#one_list:[("爱-回家","/films/6796","主演","时间"),()] one_list=self.re_func(re_bds,one_html) #直接调用数据处理函数 self.write_html(one_list) def write_html(self,one_list): item={} for one in one_list: #one 一个电影信息: 电影名称+主演+时间+评论+图片 item["name"]=one[0] item["star"]=one[2].strip() item["time"]=one[3].strip() two_url='https://maoyan.com'+one[1] item["comment"]=self.get_comment(two_url) print(item) #保存该电影所有图片 self.save_image(two_url,item["name"]) #从二级页面提取评论 def get_comment(self,two_url): two_html=self.get_html(two_url).decode() re_bds='
(.*?)
'
comment_list=self.re_func(re_bds,two_html) return comment_list #从二级页面提取出图片链接,并把图片保存到本地 def save_image(self,two_url,name): #提取图片链接 two_html=self.get_html(two_url).decode() re_bds='.*?' img_link_list=self.re_func(re_bds,two_html) directory="D:/Python_code/python_train/maoyan/top100/{}/".format(name) #如果电影名路径不存在,则先创建 if not os.path.exists(directory): os.makedirs(directory) #保存图片 for img_link in img_link_list: img_html=self.get_html(img_link) #利用链接解决图片命名问题:xxx.jpg filename=directory+img_link.split('/')[-1].split('@')[0] with open(filename,"wb") as f: f.write(img_html) #入口函数 def run(self): for offset in range(0,11,10): url=self.url.format(offset) self.parse_html(url) if __name__ == '__main__': spider=MaoyanSpider() spider.run()

你可能感兴趣的:(爬虫)