吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4898|回复: 24
收起左侧

[Python 原创] 【Python】小白学习Python之Pyquery爬取妹子图

  [复制链接]
执念i_ 发表于 2018-6-30 18:50
本帖最后由 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
下面是代码,源码下载在最后

[Python] 纯文本查看 复制代码
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 = [i for i in range(int(page_star), int(page_over) + 1)]
    print('开始为您下载第:' + str(group) + ' 页')
    pool = multiprocessing.Pool(processes=4)   #引入多进程,这里是4线程,可以自定义
    pool.map(main, group)


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

免费评分

参与人数 8吾爱币 +7 热心值 +8 收起 理由
luoluoovo + 1 + 1 谢谢@Thanks!
qq891002088 + 1 + 1 谢谢@Thanks!
jshon + 1 + 1 谢谢@Thanks!
dhs347 + 1 + 1 谢谢@Thanks!
keweiking + 1 + 1 我很赞同!
文博 + 1 热心回复!
zkx790274363 + 1 + 1 热心回复!
zhh4827 + 1 + 1 热心回复!

查看全部评分

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

 楼主| 执念i_ 发表于 2018-6-30 22:46
fang141x 发表于 2018-6-30 20:38
崔老师的视频 ?

哈哈没错,我是看崔老师的视频学习的,学到的东西都用在妹子图上了
 楼主| 执念i_ 发表于 2018-7-1 16:04 来自手机
Lucas丶 发表于 2018-6-30 20:47
下载没有进度的。。。下载完了没有都不知道。。。

下载完有的说的,下载完成,
liuxiang726 发表于 2018-6-30 19:28
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
崔老师的视频 ?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-30 05:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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