执念i_ 发表于 2018-6-30 18:50

【Python】小白学习Python之Pyquery爬取妹子图

本帖最后由 wushaominkk 于 2018-7-2 09:33 编辑

爬取妹子图第二弹,前面是用beautifulsoup爬的,传送门👉https://www.52pojie.cn/thread-758235-1-1.html
今天又学到了新的网页解析器:Pyquery和多线程模块:multiprocessing,忍不住过来给大家伙分享一下
增加了多线程爬取,大大大加速了爬取速度,
默认的是4线程
增加了自定义爬取第几页到第几页,
比如想爬第1页到第10页
运行的时候就先输入 1 回车然后输入 10 回车

还是老环境 python3.6
用到的模块:pyquery 、requests、 os、 multiprocessing
下面是代码,源码下载在最后

from pyquery import PyQuery as pq
import requests
import os
import multiprocessing

#请求每一页的链接获取组图链接
def get_url(i):
    url='http://www.meizitu.com/a/more_'+str(i)+'.html'
    headers = {
      'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    }
    html = requests.get(url=url, headers = headers).content.decode('gbk')
    doc = pq(html)#请求到的链接初始化为pyquery类型
    lis = doc('#pagecontent .tit a').items()#查找组图的链接,选择出 id=pagecontent标签 下 class=tit标签 中的a标签,再用.items()转换为可以遍历的对象
    for li in lis:#遍历上面的结果,取出组图的链接和名字,名字只是为了后面保存的时候建文件夹
      url_g = li.attr('href')
      name_g = li.text()
      if not os.path.exists('image1' + '/' + str(name_g)):# 检测是否有image目录没有则创建
            os.makedirs('image1' + '/' + str(name_g))
      get_imgurl(name_g, url_g)#调用获取组图内图片链接函数
    print('---------------下载完成------------------')

def get_imgurl(folder, imurl):#获取组图内美张图片链接函数
    url = imurl
    headers = {
      'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    }
    html = requests.get(url=url,headers=headers).content.decode('gbk')
    doc = pq(html)#和上面那个函数一样,将请求到的链接初始化为pyquery类型
    lis = doc('#picture p img').items()#获取 id=picture 下 p 标签 里的所有 img标签
    for li in lis:#遍历,得到每张图的url和名字
      picname = li.attr('alt')
      picurl = li.attr('src')
      downloadimg(folder, picname, picurl)

def downloadimg(folder, name, url):#下载保存图片
    headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    }
    file = requests.get(url=url, headers=headers)
    filename = 'image1'+'/'+str(folder)+'/'+str(name)+'.jpg'
    fp = open(filename, 'wb')
    print(filename)
    fp.write(file.content)
    fp.close()

def main(i):
    get_url(i)

if __name__ == '__main__':
    page_star = input('请输入开始页:')
    page_over = input('请输入结束页:')
    group =
    print('开始为您下载第:' + str(group) + ' 页')
    pool = multiprocessing.Pool(processes=4)   #引入多进程,这里是4线程,可以自定义
    pool.map(main, group)

源码下载地址:https://www.lanzouj.com/i1bjxnc
tip:评分不要钱,您的评分是我最大的动力
大家有想要爬的网站可以欢迎留言,我试着边学边爬:keai

执念i_ 发表于 2018-6-30 22:46

fang141x 发表于 2018-6-30 20:38
崔老师的视频 ?

哈哈没错,我是看崔老师的视频学习的,学到的东西都用在妹子图上了:keai

执念i_ 发表于 2018-7-1 16:04

Lucas丶 发表于 2018-6-30 20:47
下载没有进度的。。。下载完了没有都不知道。。。

下载完有的说的,下载完成,

liuxiang726 发表于 2018-6-30 19:28

学习了,这个必须支持{:301_1009:}

xztyx 发表于 2018-6-30 19:31

虽然看不懂。。还是顶一个~!!

枫齐 发表于 2018-6-30 19:47

我也是刚刚学Python

leowhoo 发表于 2018-6-30 19:51

学以致用。。

zxcuper 发表于 2018-6-30 19:59

学习了,这个必须支持

向往的歌 发表于 2018-6-30 20:04

我是小白……

天使3号 发表于 2018-6-30 20:05

meizitu,不错,赞一个先

清华高材生 发表于 2018-6-30 20:21

先学习一下感谢楼主分享

fang141x 发表于 2018-6-30 20:38

崔老师的视频 ?
页: [1] 2 3
查看完整版本: 【Python】小白学习Python之Pyquery爬取妹子图