python爬虫(实例1):requests+xpath 爬取并下载豆瓣电影的演员照片

import requests
import re
import os
from lxml import etree


# 地址 豆瓣 复仇者联盟4:终局之战 的全部演职员
url = "https://movie.douban.com/subject/26100958/celebrities"
# 请求
res = requests.get(url)
if res.status_code != requests.codes.ok:
    print('演职员地址请求失败!')
    exit()

# 转码
res.encoding = 'utf-8'

# 保存文件
# with open('one.html', 'w') as f:
#     f.write(res.text)

# 建立HTML树
tree = etree.HTML(res.text)
path_name = '//div[@id="wrapper"]/div[@id="content"]/h1/text()'

# 创建照片文件夹
folder = os.getcwd()+'/imgs/'+tree.xpath(path_name)[0] + '/'
if not os.path.exists(folder):
    print('创建文件夹')
    os.makedirs(folder)

# 标题 节点位置
# class 有多个必须写全 例如 含有两个 celebrities-list  __multiline 不能只写一个
path_title = '//div[@class="list-wrapper"][2]/ul[@class="celebrities-list  __multiline"]/li/a'

# 提取 标题 节点
node_title = tree.xpath(path_title)
# # 正则
re_str = 'https://img+.*[jpg|png]'

for title_node in node_title:
    title = title_node.get('title')
    # 子节点的获取,线转化为字符串再转化为HTML树
    treec = etree.HTML(etree.tostring(title_node))
    # 地址位置节点
    path_url = '//div'
    # 提取节点
    node_url = treec.xpath(path_url)
    if len(node_url) > 0:
        # 获取含有图片地址的属性
        line = node_url[0].get('style')
        # 正则匹配
        matchObj = re.search( re_str, line)
        img_url = matchObj.group()
        if matchObj:
            
            # 保存文件
            with open(folder+title+img_url[-4::], 'wb') as f:
                f.write(requests.get(img_url).content)
                print('下载成功'+title)

        else:
            print('文件地址未查询到'+title)






 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值