吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7428|回复: 87
收起左侧

[Python 转载] 爬取清纯美女图片

  [复制链接]
Hswyc 发表于 2022-3-28 22:56
本帖最后由 Hswyc 于 2022-3-28 23:02 编辑

最近浏览论坛,看到了帖子:https://www.52pojie.cn/thread-1404328-1-1.html


帖子上爬取的是https://www.vmgirls.com/这个网站的图片

预览

预览


最近在学习爬虫,准备拿这个练练手

https://www.vmgirls.com/archives.html 这里有所有文章链接的入口,所以就从这里出发了

源代码:一共是两种,一个用到了异步协程,下载会快一点


[Python] 纯文本查看 复制代码
import requests
import re
import os
import time

# 请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.52 '
}


# 在文章归档页面,获取每个分类下的链接
def get_url(url):
    resp = requests.get(url, headers=headers)
    # 这里很奇怪,F12看到的网页源代码和resp.text获得源代码不一样
    pattern = '<a target=_blank style="color:.*?" href=(.*?)>'
    # url_lst存放所有文章的链接
    arch_url_lst = re.findall(pattern, resp.text)
    arch_urls_new = []
    url_head = 'https://www.vmgirls.com/'
    for url in arch_url_lst:
        url = url_head + url
        arch_urls_new.append(url)
    resp.close()
    return arch_urls_new


# 解析
def parse_html(arch_url):
    resp = requests.get(arch_url, headers=headers)
    print(arch_url + '  ' + str(resp.status_code))
    html = resp.text
    resp.close()
    title_pattern = '<h1 class=.*?>(.*)</h1>'
    img_pattern = '<a href="(.*?)" alt=.*?</a>'
    title = re.findall(title_pattern, html)
    img_url_lst = re.findall(img_pattern, html)
    url_head = 'https:'
    img_url_lst_new = []
    for url in img_url_lst:
        url = url_head + url
        img_url_lst_new.append(url)

    return title[0], img_url_lst_new


# 下载
def download_img(img_url, title):
    resp = requests.get(img_url, headers=headers)
    content = resp.content
    resp.close()
    dir_name = title
    img_name = img_url.split('/')[-1]
    if not os.path.exists(f'../data/meimei/{dir_name}'):
        os.mkdir(f'../data/meimei/{dir_name}')
    print(dir_name + '-->' + img_name + '正在下载...')
    with open(f'../data/meimei/{dir_name}/{img_name}', 'wb') as f:
        f.write(content)
    print(dir_name + '-->' + img_name + '下载完成!')


# 主函数
def main():
    url = 'https://www.vmgirls.com/archives.html'
    arch_urls = get_url(url)
    n = 0
    num = int(input('输入要下载多少篇文章的图片:'))
    for arch_url in arch_urls:
        n += 1
        if n == num + 1:
            break
        arch_title, img_urls = parse_html(arch_url)
        for img_url in img_urls:
            download_img(img_url, arch_title)


if __name__ == '__main__':
    start = time.time()
    main()
    end = time.time()
    print(f'下载完成,用时: {end - start}s')




[Python] 纯文本查看 复制代码
import asyncio
import random
import aiofile
import aiohttp
import requests
import re
import os
import time

# 请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.52 '
}


# 在文章归档页面,获取每个分类下的链接
def get_url(url):
    resp = requests.get(url, headers=headers)
    # 这里很奇怪,F12看到的网页源代码和resp.text获得源代码不一样
    pattern = '<a target=_blank style="color:.*?" href=(.*?)>'
    # arch_urls存放所有文章的链接
    arch_urls = re.findall(pattern, resp.text)
    arch_urls_new = []
    url_head = 'https://www.vmgirls.com/'
    # 补全链接
    for url in arch_urls:
        url = url_head + url
        arch_urls_new.append(url)
    resp.close()
    return arch_urls_new


# 解析
async def download_img(arch_url):
    # 随机暂停1-2秒
    time.sleep(random.randint(1, 2))
    async with aiohttp.ClientSession() as session:
        async with session.get(arch_url, headers=headers) as resp:
            html = await resp.text()
            title_pattern = '<h1 class=.*?>(.*)</h1>'
            img_pattern = '<a href="(.*?)" alt=.*?</a>'
            arch_title = re.findall(title_pattern, html)
            img_url_lst = re.findall(img_pattern, html)
            url_head = 'https:'
            # 补全图片链接
            for one_url in img_url_lst:
                new_url = url_head + one_url
                async with session.get(new_url, headers=headers) as resp_2:
                    content = await resp_2.content.read()
                    dir_name = arch_title[0]
                    img_name = new_url.split('/')[-1]
                    if not os.path.exists(f'../data/meimei/{dir_name}'):
                        os.mkdir(f'../data/meimei/{dir_name}')
                    print(dir_name + '-->' + img_name + '正在下载...')
                    async with aiofile.async_open(f'../data/meimei/{dir_name}/{img_name}', 'wb') as f:
                        await f.write(content)
                    print(dir_name + '-->' + img_name + '下载完成!')


# 主程序
async def main():
    url = 'https://www.vmgirls.com/archives.html'
    arch_urls = get_url(url)
    tasks = []
    n = 0
    num = int(input('输入要下载多少篇文章的图片:'))
    for arch_url in arch_urls:
        n += 1
        if n == num + 1:
            break
        tasks.append(asyncio.ensure_future(download_img(arch_url)))
    await asyncio.wait(tasks)


if __name__ == '__main__':
    start = time.time()
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    end = time.time()
    print(f'下载完成,用时: {end - start}s')



速度对比,都是下载9篇文章的图片

正常情况

正常情况
   

文件夹

文件夹


异步协程

异步协程

免费评分

参与人数 16吾爱币 +14 热心值 +14 收起 理由
wtujcf123 + 1 + 1 我很赞同!
qwe134133987 + 1 + 1 热心回复!
zerone0211 + 1 + 1 谢谢@Thanks!
kmlws + 1 现在不太喜欢清纯的!
天才笨蜀黍 + 1 + 1 我很赞同!
lfm333 + 1 + 1 谢谢@Thanks!
yystrive + 1 谢谢@Thanks!
yzyuan007 + 1 + 1 热心回复!
qinni8513 + 1 + 1 谢谢@Thanks!
mafei3709 + 1 + 1 谢谢@Thanks!
lgc81034 + 1 谢谢@Thanks!
fjs4839 + 1 + 1 我很赞同!
hnwang + 1 + 1 我很赞同!
Charrya + 1 + 1 鼓励转贴优秀软件安全工具和文档!
lyd1008611 + 1 + 1 谢谢@Thanks!
beyond1994 + 1 留下了没技术的泪水

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

萌新与小白 发表于 2022-3-29 10:09
Hswyc 发表于 2022-3-29 08:47
可以先把开发人员工具当做窗口独立出来,然后再进入网站就可以使用了

不行啊,选了后再打开,网页还是会自动关闭
F12单独窗口.jpg

另外,昨天刚好有人说它有一个js是检测F12的(关键词devtool),拦截掉就行,但我这里无论是浏览器的Network还是fiddler,都没那个js
aeqvkec 发表于 2022-4-12 09:56
python太强大了, 人生苦短, 我学python. 最近刚开始学习python, 看了20讲, 学到了字符串的操作, 这一块内容, b站上有个up主的课程很不错, 推荐给想要学习的朋友们
https://www.bilibili.com/video/BV1fa411i7q4?p=25&spm_id_from=333.1007.top_right_bar_window_history.content.click
 楼主| Hswyc 发表于 2022-3-28 23:10
hjptbh 发表于 2022-3-28 23:24
不明觉厉,能给我个工具就更好了
sugar2daddy 发表于 2022-3-28 23:27
这个软件深得我心啊
405817530 发表于 2022-3-28 23:36
感谢分享!!!!
luxingyu329 发表于 2022-3-28 23:40
这个网址我 F12居然自动给我关了!
我的睡公主 发表于 2022-3-28 23:41
有空一定要学学Python
的安装和卸载
Microcharon 发表于 2022-3-28 23:47
上学期学过python,这学期还在学c++。python当工具是真的强!
Ghy410 发表于 2022-3-28 23:56
想要学习python了太强了
rain1986 发表于 2022-3-29 00:05
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 22:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表