发表于 2020-8-18 10:52

申 请 I D:2virgo3

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/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

抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
页: [1]
查看完整版本: 申 请 I D:2virgo3