4. douban爬虫

第一步:分析问题,明确结果

问题需求就是把豆瓣TOP250里面的 序号/电影名/评分/推荐语/链接 都爬取下来,结果就是全部展示打印出来

第二步:思考要用到的知识

接下来我们一起分析网页吧~
进入首页 https://movie.douban.com/top250?start=0&filter= ,打开检查工具,在Elements里查看这个网页,是什么结构。点击开发者工具左上角的小箭头,选中“肖申克的救赎”,这样就定位了电影名的所在位置,审查元素中显示标签内的文本,class属性;推荐语和评分也是如此,;序号:标签内的文本,class属性;推荐语;链接是标签里href的值。最后,它们最小共同父级标签,是


  • 我们再换个电影验证下找的规律是否正确。
    check后,我们再看一共10页,每页的url有什么相关呢?
    第1页:https://movie.douban.com/top250?start=0&filter=
    第3页:https://movie.douban.com/top250?start=50&filter=
    第7页:https://movie.douban.com/top250?start=150&filter=
    发现只有start后面是有变化哒,规律就是第N页,start=(N-1)*25
    基于以上分析,我们有两种写爬虫的思路。
    思路一:先爬取最小共同父级标签
  • ,然后针对每一个父级标签,提取里面的序号/电影名/评分/推荐语/链接。
    思路二:分别提取所有的序号/所有的电影名/所有的评分/所有的推荐语/所有的链接,然后再按顺序一一对应起来。
  • 第三步:书写思路一代码

    先爬取最小共同父级标签

  • ,然后针对每一个父级标签,提取里面的序号/电影名/评分/推荐语/链接。
  • 注:下方代码仅为思路提示,并非参考答案。

    import requests, random, bs4
    
    for x in range(10):
        url = 'https://movie.douban.com/top250?start=' + str(x*25) + '&filter='
        res = requests.get(url)
        bs = bs4.BeautifulSoup(res.text, 'html.parser')
        bs = bs.find('ol', class_="grid_view")
        for titles in bs.find_all('li'):
            num = titles.find('em',class_="").text
            #查找序号
            title = titles.find('span', class_="title").text
            #查找电影名
            tes = titles.find('span',class_="inq").text
            #查找推荐语
            comment = titles.find('span',class_="rating_num").text
            #查找评分
            url_movie = titles.find('a')['href']
    
            print(num + '.' + title + '——' + comment + '\n' + '推荐语:' + tes +'\n' + url_movie)
    
      9         num = titles.find('em',class_="").text
         10         title = titles.find('span', class_="title").text
    ---> 11         tes = titles.find('span',class_="inq").text
         12         comment = titles.find('span',class_="rating_num").text
         13         url_movie = titles.find('a')['href']
    
    AttributeError: 'NoneType' object has no attribute 'text'
    

    看下报错信息“AttributeError: ‘NoneType’ object has no attribute ‘text’ ” ,定位到了tes这一行,这是推荐语呀,为什么会错呢? 我们回归网页,发现第223个电影是《三块广告牌》,诶,它竟然没有推荐语,而空值是没办法做text文本转换的,因此报错了呢。
    那怎么解决呢,聪明的你一定想到啦~ Bingo,加一个判断就可以啦~
    修改过代码,我们再试一下哦~

    第四步:书写思路二代码

    分别提取所有的序号/所有的电影名/所有的评分/所有的推荐语/所有的链接,然后再按顺序一一对应起来。

    发布了71 篇原创文章 · 获赞 19 · 访问量 1万+

    猜你喜欢

    转载自blog.csdn.net/Theo93/article/details/104116729