我这里就以女神王祖贤的海报来作为例子。

翻页分析

在豆瓣电影中搜索“王祖贤”,进入王祖贤主页后,点击全部影人图片,进入到影人图片页面。
在该页面点击下一页,可以看到浏览器的 URL 变化如下:

https://movie.douban.com/celebrity/1166896/photos/?type=C&start=30&sortby=like&size=a&subtype=a

继续使用 Postman 来分析 URL,可以很轻松的得知,start 就是类似于 page 的页数控制参数,而且步长为 30,即第一页是 start = 0,第二页为 start = 30,第三页为 start = 60,以此类推。

详情页分析

使用 Network 来查看页面上的图片信息:
在这里插入图片描述
这里我们得到了两个信息:

  • a 标签中的链接可以得到每张图片的评论信息;
  • img 标签中的链接可以用来保存女神的海报。

对于这两个信息 url,可以分别返回:

'''
更多Python学习资料以及源码教程资料,可以在群1136201545免费获取
'''

def get_posters():
    comment_url_list = []
    picture_list = []
    for i in range(0, 40000, 30):
        url = 'https://movie.douban.com/celebrity/1166896/photos/?type=C&start=%s&sortby=like&size=a&subtype=a' % str(i)
        req = requests.get(url).text
        content = BeautifulSoup(req, "html.parser")
        chekc_point = content.find('span', attrs={'class': 'next'}).find('a')
        if chekc_point != None:
            data = content.find_all('div', attrs={'class': 'cover'})
            for k in data:
                ulist = k.find('a')['href']
                plist = k.find('img')['src']
                comment_url_list.append(ulist)
                picture_list.append(plist)
        else:
            break
    return comment_url_list, picture_list

之后,就可以下载海报了。

评论获取

然后我们手动跳转到每周海报的详情页面,继续查看评论信息。在这里插入图片描述
通过 BeautifulSoup 可以很容易地获得评论信息,然后保存到 MongoDB 中。

def get_comment(comment_l):
    client = pymongo.MongoClient('mongodb://douban:douban1989@ds149744.mlab.com:49744/douban')
    db = client.douban
    mongo_collection = db.comment
    comment_list = []
    comment = []
    print("Save to MongoDB")
    for i in comment_l:
        response = requests.get(i).text
        content = BeautifulSoup(response, "html.parser")
        tmp_list = content.find_all('div', attrs={'class': 'comment-item'})
        comment_list = comment_list + tmp_list
        for k in comment_list:
            tmp_comment = k.find('p').text
            mongo_collection.insert_one({'comment': tmp_comment})
            comment.append(tmp_comment)
    print("Save Finish!")

本文转载:CSDN博客