吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2152|回复: 1
收起左侧

[会员申请] 申 请 I D:2virgo3

[复制链接]
吾爱游客  发表于 2020-8-18 10:52
1、申 请 I D:2virgo3
2、个人邮箱:1135032976@qq.com
3、原创技术文章:Python-异步爬虫爬取图片

===========================================
使用的模块:
iimport os,requests
from lxml import etree
from multiprocessing.dummy import Pool
===========================================
总流程:
     1.使用requests库对网站发起请求,获得网站源码
     2.创建etree对象
     3.使用xpath解析数据
     4.使用Pool类异步下载数据
     5.使用os库创建文件夹,持久化存储数据

===========================================
代码:

import os,requests
from lxml import etree
from multiprocessing.dummy import Pool
def img_pages(i)://图片名称以及URL获取
    if i == 1:
        url = 'http://pic.netbian.com/4kfengjing/index.html'
    if i != 1:
        url = 'http://pic.netbian.com/4kfengjing/index_'+str(i)+'.html'
    page_text = requests.get(url=url,headers=headers).text
    tree = etree.HTML(page_text)
    li_list = tree.xpath('//*[@id="main"]/div[3]/ul/li')
    for li in li_list:
        img_url ='http://pic.netbian.com'+li.xpath('./a/img/@src')[0]
        img_name = li.xpath('./a/img/@alt')[0]+'.jpg'
        img_name=img_name.encode('iso-8859-1').decode('gbk')
        dic={
            "name":img_name,
            "url":img_url,
        }
        all_img.append(dic)
def get_img_date(dic): //图片下载(堵塞)
    src = dic['url']
    name = dic['name']
    print(name,'正在下载.......'+'\n')
    response = requests.get(url=src,headers=headers).content
    file_path = 'pic/'+name
    with open(file_path,'wb') as fp:
        fp.write(response)
        print(name,'下载完成'+'\n')
//开始
headers = {
    "User-Agent":"Mozilla/5.0"
}
all_img=[]//储存解析到的图片URL和图片名字
if not os.path.exists('./pic')://创建文件夹
    os.mkdir('./pic')
for i in range(1,5)://下载 1-5 页图片
    img_pages(i)
pool = Pool(5)//开启5个线程
pool.map(get_img_date,all_img)//载入堵塞
pool.close()
pool.join()



===========================================
小记:
1.os库:Python标准库,常用路径操作、进程管理、环境参数等几类。
2.requests库:它比urllib更加方便,可以节约我们大量的工作,常用.get()和.post()。
3.为什么用xpath解析?
       -不太喜欢正则表达式,有太多的元字符,运算符还有优先级的考虑。
       -BeautifulSoup很多人觉得简单而且API人性化,但是性能上没有xpath强。
        -xpath,因为底层是C语言编写,性能没话说。操作难易上,网页右键检查,选中需要的标签后再右键可以直接复制xpath,个人感觉xpath会更方便一些。
4.进程池pool进行自动控制进程
       -注意调用join之前先调用close,否则会出错。
       -启用线程不能过多。
       -要将程序中阻塞操作(图片下载)封装为函数,作为.map()的参数。

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

Hmily 发表于 2020-8-21 16:01
抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 01:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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