zoukankan      html  css  js  c++  java
  • 爬取豆瓣电影top250

    引言

    为实现豆瓣top50电影在一个Excel表中一览无遗~

    豆瓣电影top250/爬取时间20211005

    【存在问题】

    一次性写入csv存在问题:

    UnicodeEncodeError: 'gbk' codec can't encode character 'xee' in position 59: illegal multibyte sequence

    如果你想一下子爬下来,本代码无法实现。

    思路

    html比较清晰的字段,可以一下子爬取250条;稍微混乱点的,或者存在空字段的采取了分页爬取措施。

    影片、上映年份、评分、评价人数一下子爬取250条;其余分页爬取,分别是导演主演、地区类型、一句话总概括。

    下面的代码最重要的部分是

    obj=re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<电影名>.*?)</span>',re.S)

    如何找出你要的内容,参考python爬虫入门(6)爬取豆瓣电影top250

    1.影片

    # 需要的库
    import requests
    import re 
    # 250
    for i in range(0,250,25):
        url = "https://movie.douban.com/top250?start="+str(i)+"&filter="
        headers = {
                "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
            }
        resp=requests.get(url,headers=headers)
        page_content=resp.text # html
        
        #测试一下,爬取电影名
        obj=re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<电影名>.*?)</span>',re.S)
        ret = obj.finditer(page_content)#页面源码代入解析
        for it in ret:
            print(it.group("电影名"))

    2.上映年份

    # 250
    for i in range(0,250,25):
        url = "https://movie.douban.com/top250?start="+str(i)+"&filter="
        headers = {
                "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
            }
        resp=requests.get(url,headers=headers)
        page_content=resp.text # html
        
        #测试一下,爬取年份
        obj=re.compile(r'<li>.*?<div class="item">.*?<p class="">.*?<br>(?P<年份>.*?)&nbsp',re.S)
        ret = obj.finditer(page_content)#页面源码代入解析
        for it in ret:
            print(it.group("年份").strip())

    3.评分

    # 250
    for i in range(0,250,25):
        url = "https://movie.douban.com/top250?start="+str(i)+"&filter="
        headers = {
                "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
            }
        resp=requests.get(url,headers=headers)
        page_content=resp.text # html
        
        #评分
        obj=re.compile(r'<li>.*?<div class="item">.*?<span class="rating_num" property="v:average">(?P<评分>.*?)</span>',re.S)
        ret = obj.finditer(page_content)#页面源码代入解析
        for it in ret:
            print(it.group("评分").strip())

    4.评价人数

    # 250
    for i in range(0,250,25):
        url = "https://movie.douban.com/top250?start="+str(i)+"&filter="
        headers = {
                "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
            }
        resp=requests.get(url,headers=headers)
        page_content=resp.text # html
        
        #评价人数
        obj=re.compile(r'<li>.*?<div class="item">.*?<span>(?P<评价人数>.*?)人评价</span>',re.S)
        ret = obj.finditer(page_content)#页面源码代入解析
        for it in ret:
            print(it.group("评价人数").strip())

    5.导演主演

    i=225 #你要爬取的是哪一页
    url = "https://movie.douban.com/top250?start="+str(i)+"&filter="
    headers = {
                "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
            }
    resp=requests.get(url,headers=headers)
    page_content=resp.text # html
        
    #爬取一页的,导演主演
    obj=re.compile(r'<li>.*?<div class="item">.*?<p class="">.*?(?P<导演主演>.*?)<br>',re.S)
    ret = obj.finditer(page_content)#页面源码代入解析
    for it in ret:
        print(it.group("导演主演").strip())

    6.地区类型

    i=225
    url = "https://movie.douban.com/top250?start="+str(i)+"&filter="
    headers = {
                "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
            }
    resp=requests.get(url,headers=headers)
    page_content=resp.text # html
        
    #爬取一页的,地区类型
    obj=re.compile(r'<li>.*?<div class="item">.*?<p class="">.*?&nbsp;/&nbsp;(?P<地区类型>.*?)</p>',re.S)
    ret = obj.finditer(page_content)#页面源码代入解析
    for it in ret:
        print(it.group("地区类型").strip())

    7.一句话总概括

    i=200
    url = "https://movie.douban.com/top250?start="+str(i)+"&filter="
    headers = {
                "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
            }
    resp=requests.get(url,headers=headers)
    page_content=resp.text # html
        
    #爬取一页的,经典台词
    obj=re.compile(r'<li>.*?<div class="item">.*?<span class="inq">(?P<经典台词>.*?)</span>',re.S)
    ret = obj.finditer(page_content)#页面源码代入解析
    for it in ret:
        print(it.group("经典台词"))

    可以看出导演主演,地区类型是一起爬出的,由于数据比较少,就在Excel中直接进行单元格切分处理了。

  • 相关阅读:
    P5468 [NOI2019]回家路线
    P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
    P4390 [BOI2007]Mokia 摩基亚
    P4234 最小差值生成树
    P5459 [BJOI2016]回转寿司
    P2173 [ZJOI2012]网络
    P2163 [SHOI2007]园丁的烦恼
    P3826 [NOI2017]蔬菜
    P3327 [SDOI2015]约数个数和
    P1829 [国家集训队]Crash的数字表格 / JZPTAB
  • 原文地址:https://www.cnblogs.com/Cookie-Jing/p/15368254.html
Copyright © 2011-2022 走看看