当前位置:   article > 正文

Python爬虫豆瓣电影top250

Python爬虫豆瓣电影top250

  我的另一篇博客,Python爬虫豆瓣读书评分9分以上榜单

  有了上次的基础,这次简单爬了下豆瓣上电影TOP250,链接豆瓣电影TOP250

  打开链接,查看网页源代码,查找我们需要的信息的字段标签,本次以标题、概要、评分、图片为目标,分别进行处理、获取并保存。(当然最根本的前提依然是通过url获取到网页的源代码)

  本实例完整代码请移步github:

  https://github.com/selfcon/douban_movie_scraper_python

  推荐正则表达式在线检测工具:

  http://tool.oschina.net/regex/

1、源代码html

# 获取网页源代码
def getHtml(url):
    page = urllib.request.urlopen(url);
    html = page.read();
    return html;
  • 1
  • 2
  • 3
  • 4
  • 5

2、标题title

这里写图片描述

  从源代码中可以发现,标题有多个,而我们需要的是首标题。因此需要对通过正则表达式获得的结果进行相应的处理。

# 通过正则表达式获取该网页下的每部电影的title
def getName(html):
    nameList = re.findall(r'<span.*?class="title">(.*?)</span>', html, re.S);
    global topnum
    newNameList = [];
    for index,item in enumerate(nameList):
        if item.find("&nbsp") == -1:#通过检测&gt或者&nbsp这种HTML转义符,只保留第一个标题
            newNameList.append("Top " + str(topnum) + " " + item);
            topnum += 1;
    return newNameList;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3、概要introduction

这里写图片描述

  通过源代码可以找到相应的标签,编写正则表达式(ps:由于有的电影没有概要介绍,所以在最后的数据存储中没存储该属性

# 通过正则表达式获取该网页下的每部电影的introduction
def getInfo(html):
    infoList = re.findall(r'<span.*?class="inq">(.*?)</span>', html, re.S);
    return infoList;
  • 1
  • 2
  • 3
  • 4

4、评分rating

这里写图片描述

# 通过正则表达式获取该网页下的每部电影的rating_num
def getScore(html):
    scoreList = re.findall(r'<span.*?class="rating_num".*?property="v:average">(.*?)</span>', html, re.S);
    return scoreList;
  • 1
  • 2
  • 3
  • 4

5、图片img

这里写图片描述

# 通过正则表达式获取该网页下的每部电影的img
def getImg(html):
    imgList = re.findall(r'<img.*?alt=.*?src="(https.*?)".*?class.*?>', html, re.S);
    return imgList;
  • 1
  • 2
  • 3
  • 4

6、翻页page

这里写图片描述

  我们发现一共250条记录,每页10条,共25页

# 实现翻页,每页25个
for page in range(0,250,25):
    url = "https://movie.douban.com/top250?start={}".format(page)
    html = getHtml(url).decode("UTF-8");
    namesUrl.extend(getName(html));
    scoresUrl.extend(getScore(html));
    infosUrl.extend(getInfo(html));
    imgsUrl.extend(getImg(html));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

7、打印print

# 将获得的信息进行打印,并存给列表allinfo,方便存储
allInfo = [];
if len(namesUrl) == len(scoresUrl) == len(imgsUrl):
    length = len(namesUrl);
    for i in range(0,length):
        print(namesUrl[i]+" , score = "+scoresUrl[i]+" ,\n imgUrl="+imgsUrl[i]);
        tmp = [];
        tmp.append(namesUrl[i]);
        tmp.append(scoresUrl[i]);
        tmp.append(imgsUrl[i]);
        allInfo.append(tmp);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

8、存储store

# 将获得的数据进行存储
def save_to_csv(list_tmp):
    with open('D:/movie.csv','w+',newline='') as fp:
        a = csv.writer(fp,delimiter=',');
        a.writerow(['name','score','imgurl']);
        a.writerows(list_tmp);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

9、结果result

这里写图片描述

------至所有正在努力奋斗的程序猿们!加油!!
有码走遍天下 无码寸步难行
1024 - 梦想,永不止步!
爱编程 不爱Bug
爱加班 不爱黑眼圈
固执 但不偏执
疯狂 但不疯癫
生活里的菜鸟
工作中的大神
身怀宝藏,一心憧憬星辰大海
追求极致,目标始于高山之巅
一群怀揣好奇,梦想改变世界的孩子
一群追日逐浪,正在改变世界的极客
你们用最美的语言,诠释着科技的力量
你们用极速的创新,引领着时代的变迁

——乐于分享,共同进步,欢迎补充
——Treat Warnings As Errors
——Any comments greatly appreciated
——Talking is cheap, show me the code
——诚心欢迎各位交流讨论!QQ:1138517609
——CSDN:https://blog.csdn.net/u011489043
——简书:https://www.jianshu.com/u/4968682d58d1
——GitHub:https://github.com/selfconzrr

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/191160
推荐阅读
相关标签
  

闽ICP备14008679号