aiohttp aiofiles asyncio异步爬取妹子图

import aiohttp
import asyncio
import aiofiles
import async_timeout
from bs4 import BeautifulSoup
import time
import os

async def aitaotu(sem, urllist):
    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4',
        'Host': 'www.aitaotu.com',
        'Referer': 'https://www.aitaotu.com/guonei/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36',
    }
    for url in urllist:
        async with aiohttp.ClientSession() as session:
            async with session.get(url, verify_ssl=False, headers=headers) as resp:
                if resp.status == 200:
                    respdata = await resp.text()
                    page = BeautifulSoup(respdata, 'lxml')
                    hrefs = page.select('#infinite_scroll > div > div.item_t > div > a')
                    img_urls = page.select('#infinite_scroll > div > div.item_t > div > a > img')
                    titles = page.select('#infinite_scroll > div > div.item_b.clearfix > div.title > span > a')
                    for href1, img_url1, title1 in zip(hrefs, img_urls, titles):
                        href = href1.get('href')
                        title = title1.get_text()
                        href_url = 'https://www.aitaotu.com' + href
                        async with session.get(href_url, verify_ssl=False, headers=headers) as contentresp:
                            if contentresp.status == 200:
                                contentrespdata = await contentresp.text()
                                content_page = BeautifulSoup(contentrespdata, 'lxml')
                                images = content_page.select('#big-pic > p > a > img')
                                for image1 in images:
                                    image = image1.get('src')
                                    print(image)
                                    async with sem:
                                        await download_coroutine(image, title)
                                        print('图片下载完成.')
                else:
                    print('被阻止,状态码:', resp.status)

async def download_coroutine(url, title):
    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate, sdch',
        'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4',
        'Host': 'img.aitaotu.cc:8089',
        'Referer': 'https://www.aitaotu.com/taotu/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36',
    }
    try:
        with async_timeout.timeout(30):
            async with aiohttp.ClientSession() as session:
                async with session.get(url, verify_ssl=False, headers=headers) as response:
                    if not os.path.exists(title):
                        os.mkdir(title)
                    filename = os.path.basename(url)
                    async with aiofiles.open(os.path.join(title, filename), 'wb') as fd:
                        while True:
                            chunk = await response.content.read(1024)
                            if not chunk:
                                break
                            await fd.write(chunk)
    except Exception as e:
        print(e)

if __name__ == '__main__':
    urllist = ['https://www.aitaotu.com/guonei/list_{}.html'.format(x) for x in range(605)]               + ['https://www.aitaotu.com/rihan/list_{}.html'.format(x) for x in range(202)]               + ['https://www.aitaotu.com/gangtai/list_{}.html'.format(x) for x in range(33)]               + ['https://www.aitaotu.com/meinv/list_{}.html'.format(x) for x in range(89)]
    start = time.time()
    sem = asyncio.Semaphore(100)
    loop = asyncio.get_event_loop()
    # loop = asyncio.ProactorEventLoop()
    # asyncio.set_event_loop(loop)
    loop.run_until_complete(aitaotu(sem, urllist))
    print('总共耗时 %s s' % (time.time() - start))

原文地址:http://blog.51cto.com/wenguonideshou/2061714

时间: 2024-09-30 23:01:33

aiohttp aiofiles asyncio异步爬取妹子图的相关文章

Python 爬虫入门(二)——爬取妹子图

Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob/master/%E7%88%AC%E8%99%AB%E9%9B%86%E5%90%88/meizitu.py 公众号:[智能制造专栏].欢迎关注,分享智能制造与编程那些事. 爬虫成果 当你运行代码后,文件夹就会越来越多,如果爬完的话会有2000多个文件夹,20000多张图片.不过会很耗时间,可以在

Python 爬虫入门之爬取妹子图

Python 爬虫入门之爬取妹子图 来源:李英杰  链接: https://segmentfault.com/a/1190000015798452 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob/master/%E7%88%AC%E8%99%AB%E9%9B%86%E5%90%88/meizitu.py 爬虫成果 当你运行代码后,文件夹就会越来越多,如果爬完的话会有2

爬取妹子图

这是之前写的一个简单爬取妹纸图的爬虫,下面是源代码: # -*- coding: utf-8 -*- import requests,time,urllib.request,os from multiprocessing import Processfrom lxml import etree #os.chdir("meizhu")切换工作目录print (os.getcwd())#查看当前工作目录 headers = {"User-Agent" : "M

Python又来爬取妹子图啦,一个T的硬盘都不够用

淘女郎爬虫,可动态抓取淘女郎的信息和照片. 需要额外安装的第三方库 requests pip install requests pymongo pip install pymongo 学习Python过程中会遇到很多问题,你可以到我们的 python学习交流群[七 三 五,九 三 四,八 四 一],基础,进阶.从企业招聘人才需求 到怎么学习python,和学习什么内容都有免费系统分享,让你无论是自学还是找相应的培训都能让你少走弯路.希望可以帮助你快速了解Python,学习python 模块功能

爬取妹子图(requests + BeautifulSoup)

---恢复内容开始--- 刚刚入门爬虫,今天先对于单个图集进行爬取,过几天再进行翻页爬取. 使用requests库和BeautifulSoup库 目标网站:妹子图 今天是对于单个图集的爬取,就选择一个进行爬取,我选择的链接为:http://www.mzitu.com/123114 首先网站的分析,该网站有一定的反爬虫策略,所以应对就是加入headers(目前是小白,目前不知道具体为毛这样做) Hostreferer = { 'User-Agent':'Mozilla/4.0 (compatibl

使用request+Beautiful爬取妹子图

一.request安装 pip install requests request使用示例 import requests response = requests.get('https://www.mzitu.com/') # get()方法发送请求,获取HTML网页 response.status_code # 返回状态码 response.text #以文本格式返回网页内容 response.content # 以二进制形式返回 二.BeautifulSoup库 BeautifulSoup是P

python 爬取妹子图

作为一个python还没入门的小白,搞懂这段代码实在是很不容易,还要去学html的知识(#黑脸) 因此我加上了注释,比较好读懂点 #coding=utf-8 import time import requests from bs4 import BeautifulSoup import os import sys if(os.name == 'nt'): print(u'你正在使用win平台') else: print(u'你正在使用linux平台') header = {'User-Agent

Python使用asyncio+aiohttp异步爬取猫眼电影专业版

asyncio是从pytohn3.4开始添加到标准库中的一个强大的异步并发库,可以很好地解决python中高并发的问题,入门学习可以参考官方文档 并发访问能极大的提高爬虫的性能,但是requests访问网页是阻塞的,无法并发,所以我们需要一个更牛逼的库 aiohttp ,它的用法与requests相似,可以看成是异步版的requests,下面通过实战爬取猫眼电影专业版来熟悉它们的使用: 1. 分析 分析网页源代码发现猫眼专业版是一个动态网页,其中的数据都是后台传送的,打开F12调试工具,再刷新网

抓取妹子图

import requests from bs4 import BeautifulSoup import os class mzitu(): def requst(self,url):#定义获取网页的函数 headers={'user-agent':"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"}#模拟浏览器,以