IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> urllib+xpath实现爬取豆瓣个人用户年度观影海报 -> 正文阅读

[人工智能]urllib+xpath实现爬取豆瓣个人用户年度观影海报

基本思路:
1.根据输入的用户id组成完整的请求url地址(注意每次请求的地址不一样)
2.至少发起一次请求去获取用户的记录总页数(同时第一次请求也下载数据)
3.根据获取的总页数每次请求一页,解析出用户名,电影海报图片,电影名并下载至本地
4.每次下载时根据标记日期来判断是否已经将本年度的数据下载完,下载完但如果还继续执行下载则抛出异常

缺陷:
1.由于豆瓣不能直接筛选某一年度的电影,所有如果要下载较早的年度电影,会从最近的年份开始一一匹配,效率较低

# 需求分析,爬取年度观影的电影海报及电影名
# base_url = 'https://movie.douban.com/people/用户的id/collect?'
# 第一页 url = base_url + start=0
# 第二页 url = base_url + start=15
# 第三页 url = base_url + start=30
# 总页数: //span[@class="thispage"]/@data-total-page
# 用户名: //div[@class="side-info-txt"]/h3
import urllib.request
from lxml import etree
import os

def create_request(page,user_id):
    url = f'https://movie.douban.com/people/{user_id}/collect?start={(page-1)*15}'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
    }
    request = urllib.request.Request(url=url,headers=headers)
    return request

def get_content(request):
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf-8')
    return content

def down_load(content,page,year):
    tree = etree.HTML(content)
    # 解析数据
    user_name = tree.xpath('//div[@class="side-info-txt"]/h3/text()')[0]
    movie_name_list = tree.xpath('//div[@class="grid-view"]/div/div[@class="info"]//em/text()')
    movie_src_list = tree.xpath('//div[@class="grid-view"]//img/@src')
    mark_date_list = tree.xpath('//span[@class="date"]/text()')
    # 判断是否存在目录
    dirs = f'./{user_name}{year}年度观影海报'
    if not os.path.exists(dirs):
        os.makedirs(dirs)
    # 下载
    for i in range(len(movie_src_list)):
        mark_date = str(mark_date_list[i])
        if(int(mark_date.split('-')[0])<year):
            # 抛出异常
            raise Exception
        elif (int(mark_date.split('-')[0]) == year):
            url = movie_src_list[i]
            name = movie_name_list[i].split('/')[0]
            urllib.request.urlretrieve(url,dirs+'/'+name+'.jpg')
            print(mark_date)
            print(name,url)
    if page == 1:
        total_page = tree.xpath('//span[@class="thispage"]/@data-total-page')
        return int(total_page[0]) if len(total_page)>0 else 0

if __name__ == '__main__':
    # 输入需要爬取的年份 输入需要爬取的用户id
    year = int(input('输入需要爬取的年份:'))
    user_id = input('输入需要爬取的用户id:')
    page = 1
    # 请求对象的定制
    try:
        request = create_request(page, user_id)
        # 获取网页内容
        content = get_content(request)
        # 下载海报数据(如果有)并返回总页数
        total_page = down_load(content, page, year)
        print('总记录页数',total_page)
        if total_page == 0:
            print('Error:当前用户无观影数据')
        elif total_page > 1:
            # 异常
            try:
                for page in range(2, total_page + 1):
                    print(f'当前请求第{page}页')
                    # 请求对象的定制
                    request = create_request(page, user_id)
                    # 获取网页内容
                    content = get_content(request)
                    # 下载海报数据(如果有)
                    down_load(content, page, year)
            except Exception:
                print("当前年度查找完毕")
    except:
        print("当前年度查找完毕")
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:36:39  更:2022-02-01 20:39:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 5:22:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码