首页 > 编程语言 >python requests-html

python requests-html

时间:2023-04-06 18:00:57浏览次数:36  
标签:title python list url html 4k print requests

#pip install requests-html

 

'''
    目标网站: https://pic.netbian.com
'''
from requests_html import HTMLSession
import re,os
import requests
from tqdm import tqdm
from functools import partial
from multiprocessing import Pool
session = HTMLSession()
 
# 获取下载链接
def get_urllist(addr):
    '''
    :addr: 传入该网站一个地址
    :return:  返回一个高清大图下载地址字典(标题:url)
    '''
    addr = f'https://pic.netbian.com{addr}'
    r = session.get(addr)
    # // 查看页面内容
    # print(r.html.html)
    # 获取链接
    # print(r.html.links) # 所有链接
    url_list = r.html.absolute_links # 绝对链接
    # print(url_list)
    rule = re.compile('(https://pic.netbian.com/tupian/[0-9]{1,9}.html)')
 
    href_list = re.findall(rule,str(url_list))
    # print(href_list)
    # print('获取图片:',len(href_list))
    # 请求进去得到高清壁纸
    complete_url_dict = {}
    for i in href_list:
        response = session.get(i)
        # print(response.html.html)
        # 获取部分url
        imperfect_url = response.html.xpath("//a[@id='img']/img/@src",first=True)
        title = response.html.xpath("//a[@id='img']/img/@title",first=True)
        # 拼接完整url
        url = f'https://pic.netbian.com{imperfect_url}'
        complete_url_dict.update({url:title})
 
    return complete_url_dict
 
 
# 下载图片
def download(url_dict,save_path):
    '''
    :save_path: 保存目录
    :param url_dict: 图片下载地址列表
    :return:
    '''
    # print(url_dict)
    name_list = os.listdir(save_path)
    # print(name_list)
    # for url,title in tqdm(url_dict.items()):
    url = url_dict[0]
    title = url_dict[1]
    if f'{title}.jpg' in name_list:
        print(title,'已存在...跳过!')
        pass
    else:
        with open(f'{save_path}/{title}.jpg', mode='wb') as f:
            f.write(requests.get(url).content)
            # print(title,':写入成功!')
 
if __name__ == '__main__':
    # 根据网站创建图片分类
    dic = {
        '4k风景':'/4kfengjing/',
        '4k美女':'/4kmeinv/',
        '4k游戏': '/4kyouxi/',
        '4k动漫': '/4kdongman/',
        '4k影视': '/4kyingshi/',
        '4k汽车': '/4kqiche/',
        '4k动物': '/4kdongwu/',
        '4k人物': '/4krenwu/',
        '4k美食': '/4kmeishi/',
        '4k宗教': '/4kzongjiao/',
        '4k背景': '/4kbeijing/',
        '4k手机壁纸': '/shoujibizhi/',
 
    }
    # url:title 字典
    print('图片下载器'.center(50,'='))
    for id,i in enumerate(dic.keys()):
        print(f'{id+1}.{i}')
    print(''.center(50, '='))
    try:
        idd = int(input('请选择图片序号:'))-1
        num = int(input('请选择下载页数:'))
        if num > 10:
            print('为确保安全,最多下载10页!!')
            num = 10
        if num <= 0:
            print('1<下载页数<10')
            exit()
    except:
        print('请输入数字!')
        exit()
    print('正在获取下载链接-/-/')
    name = list(dic.keys())[idd]
    # 第一页链接
    url_dict = get_urllist(dic[name])
    # 后几页链接
    for x in range(1,num):
        url_dict.update(get_urllist(dic[name]+f'index_{x+1}.html'))
    print('下载图片张数:',len(url_dict))
    save_path = f'./图片/{name}'
    if not os.path.exists(save_path):
        os.mkdir(save_path)
    # print(url_dict)
    # 下载图片
    # download(url_dict,save_path)
    print('正在下载-/-/')
    func = partial(download, save_path=save_path)
    pool = Pool(10)
    r = list(tqdm(pool.imap(func, url_dict.items()), total=len(url_dict.items()), ncols=80))
    pool.close()
    pool.join()

  

标签:title,python,list,url,html,4k,print,requests
From: https://www.cnblogs.com/boye169/p/17293643.html

相关文章

  • python系列006
    先使用一个文件控制设备importtime#importpyvisafrompimiimportPiDevicedevice=PiDevice("ASRL3::INSTR")#创建实例,并手动写入地址参数,可以借助NIMax读取whoisPower=device.PiPower()#调用类中的方法,电源地址#Sendacommandtotheinstrument#......
  • html 元素定位与接口请求总结
    1.下拉框环境:测试生产 <selectid="sid"onchange=""style="margin-right:20px;width:100px;"><optionid="dev"value="dev">测试</option><optionid="prod"value="prod"......
  • HTML
    HTML介绍网页和html介绍网页介绍静态网页与动态网页:静态网页:我们写好的html内容在浏览器中显示出来的效果始终都一样,不管次进行多少访问,如果想内容改变那么必须修改源代码。动态网页:页面的内容是由服务器端程序控制输出,比如不同的人使用相同的网站,但是显示的当前用户是不一样的......
  • python中动态导入文件的方法
    1.简介在实际项目中,我们可能需要在执行代码的过程中动态导入包并执行包中的相应内容,通常情况下,我们可能会将所需导入的包及对象以字符串的形式传入,例如test.test.run,下面将介绍如何动态导入。假设存在如下包:其中test.py的内容如下:count=1defrun():print("run")......
  • 学习一 ——HTML的基础标签
    HTML意为超文本标记语言。在HTML+CSS+JS的体系中主要构建网站内容展示。<meta>设置编码方式例如UTF-8;GBK等。<ul>表示无序列表,<ol>有序列表<p>表示段落,<u>表示下划线 <b>字体加粗<i>斜体<sub>下标 <sup>上标 <alt>表示HTML元素本身的物件无法被渲染时,就可以显示alt......
  • opencv-python 4.12. 模板匹配
    理论模板匹配是一种在较大图像中搜索和查找模板图像位置的方法。为此,OpenCV附带了一个函数cv.matchTemplate()。它只是在输入图像上滑动模板图像(如在2D卷积中),并比较模板图像下的输入图像的模板和补丁。在OpenCV中实现了几种比较方法。它返回一个灰度图像,其中每个像素表示该像素的......
  • 通过python控制windows窗口的关闭和显示
    代码:importwin32gui,win32con,win32apiimportos,sys,reimportctypesimporttimedefshowWindow(hwnd):#展示窗口,以下几行代码都可以唤醒窗口win32gui.ShowWindow(hwnd,win32con.SW_SHOW)win32gui.ShowWindow(hwnd,win32con.SW_SHOWNA)win32gu......
  • 网页一键分享按钮HTML代码
    在网页中加入以下代码可以实现网页的一键分享:<!DOCTYPEhtml><html><head><METAhttp-equiv="content-type"content="text/html;charset="UTF-8"><title>Inserttitlehere</title></head><body><divclass......
  • python面向对象基础
    1.__str__def__str__(self):return'****'print对象时,打印的为__str__函数返回的值2.__del__()def__del__(self):#pass当删除对象时,将会自动调用__del__函数(删除对象:delobj)python继承:classA(B):pass其中A继承Bpython3+classA(object):pass任......
  • python3使用seaborn生成带有扰动点的分组箱型图
    不分组箱型图importjsonimportseabornassnsimportmatplotlib.pyplotaspltfig=plt.figure(figsize=(20,5))sns.set(style="darkgrid")xData=[]yData=[]zData=[]withopen('./files/1.txt',encoding='utf-8-sig')asf:......