吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 15423|回复: 81
收起左侧

[Python 转载] Python3多线程爬取妹子图的图片

  [复制链接]
Hatsune_miku 发表于 2019-3-26 23:44
我也来写个爬虫,主要爬取妹子图网站的图片,使用前需要确认你的Python版本为Python3。
1.安装依赖
[Shell] 纯文本查看 复制代码
pip install requests
pip install lxml
pip install feedparser

2.创建一个文件夹放下此脚本
3.运行脚本
[Shell] 纯文本查看 复制代码
python mzitu.py

说明:我偷了个懒,发现这个网站有rss订阅源,所以直接获取rss里的链接。在rss订阅源里刚好20个链接,所以15行是range(20),这里没写异常捕获,如果超过20,会报错,可以小于不能大于。如果想获取所有文章链接的话,可以自己修改get_url()函数。
注意:如果环境,依赖包都OK的话,可以直接把代码复制好运行的,Windows10跟Linux系统都可以运行。
[Python] 纯文本查看 复制代码
# -*- coding: UTF-8 –*-
import feedparser
import requests
from lxml import etree
import threading
import random
import os

def get_url():

	rss_url = 'https://www.mzitu.com/feed/'
	feeds = feedparser.parse(rss_url)

	page_url = []
	for i in range(20):
		page_url.append(feeds.entries[i]['link'])

	return page_url

def download(dirname, imgurl):

	headers = {
	'referer':'https://www.mzitu.com/',
	'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
	}

	filename = imgurl.split('/')[-1]

	r = requests.get(imgurl, headers = headers, stream=True)
	if os.path.exists(dirname):
		with open(dirname + '/' + filename, 'wb') as f:
			for chunk in r.iter_content(chunk_size=32):
				f.write(chunk)
			print('下载:%s中' % filename)
	else:
		os.mkdir(dirname)
		with open(dirname + '/' + filename, 'wb') as f:
			for chunk in r.iter_content(chunk_size=32):
				f.write(chunk)
			print('下载:%s中' % filename)

def get_img(url):

	r = requests.get(url)
	page = etree.HTML(r.text)
	span = page.xpath('/html/body/div[2]/div[1]/div[4]/a[5]/span')
	hs = page.xpath('//h2[@class="main-title"]')
	for h in hs:
		title = h.text
	for a in span:
		pages = a.text
	try:
		for i in range(int(pages)+1):
			if i == 1:
				pass
			else:
				imgpage = url + '/' + str(i)
				r1 = requests.get(imgpage)
				page1 = etree.HTML(r1.text)
				x_href = page1.xpath('/html/body/div[2]/div[1]/div[3]/p/a/img')
				for href in x_href:
					imgurl = href.get('src')
					download(title, imgurl)
	except KeyboardInterrupt:
		pass
	except:
		pass

def main():

	urls = get_url()
	threads=[]
	for i in range(len(urls)):
		t = threading.Thread(target=get_img, args=(urls[0+i],))
		threads.append(t)

	for i in threads:
		i.start()

	for i in threads:
		i.join()

if __name__ == '__main__':
	main()

下载的文件

下载的文件

下载结果

下载结果

免费评分

参与人数 15吾爱币 +14 热心值 +13 收起 理由
牧濑伊莉雅 + 1 + 1 用心讨论,共获提升!
cilence + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
豆小果 + 1 + 1 谢谢@Thanks!
tjp24 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
xstormli + 1 + 1 多线程的可以看看学习一下,对于抓图效率还是有很大的提升的!
路漫漫w + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
854592389 + 1 + 1 热心回复!
达先 + 1 谢谢@Thanks!
aa2727 + 1 + 1 懂技术真好
sevfox + 1 + 1 谢谢@Thanks!
西南墙 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
zkx790274363 + 1 + 1 谢谢@Thanks!
PrestonYu + 1 + 1 我很赞同!
ipord + 1 热心回复!
winyee + 1 用心讨论,共获提升!

查看全部评分

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

Dmail 发表于 2019-4-21 16:11
本帖最后由 Dmail 于 2019-6-2 18:50 编辑

[Python] 纯文本查看 复制代码
def get_url2():
	headers = {
		'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36'
		}        rss_url = 'https://www.mzitu.com/all/'
        r = requests.get(rss_url,headers=headers)
        page = etree.HTML(r.text)
        result =page.xpath('/html/body/div[2]/div[1]/div[2]/ul/li/p[2]/a')
        print('有%d组图'%len(result))
        page_url = []
        for x in result:
                page_url.append(x.get('href'))
                #print(x.get('href'))
        return page_url

采集每日更新里面的所有url

批注 2019-04-21 162427.png
修改后的main函数。
[Python] 纯文本查看 复制代码
def main():        #get_img("https://www.mzitu.com/177416")
        newUrls = get_url2()
        #print('请输入你要下载的组数目')
        urls=[]
        flag=input("请输入你要下载的组数目:")
        flag=int(flag)
        #print(flag)
        for x in range(flag):
                urls.append(newUrls[x])
        #urls = get_url()
        threads=[]

        for i in range(len(urls)):
                #print(len(urls))
                t = threading.Thread(target=get_img, args=(urls[0+i],))
                threads.append(t)

        for i in threads:
                i.start()

        for i in threads:
                i.join()
南宫乘风 发表于 2019-3-26 23:57
军马大校 发表于 2019-3-26 23:57
wmg13178599398 发表于 2019-3-26 23:58
网址好评
安南 发表于 2019-3-27 00:05
嗯,已阅,收下来了
小金金ppq 发表于 2019-3-27 00:55
C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\python.exe H:/python-leason/12.py
Traceback (most recent call last):
  File "H:/python-leason/12.py", line 3, in <module>
    from lxml import etree
ImportError: cannot import name 'etree'

Process finished with exit code 1

出现这个错误什么回事呢
netpx 发表于 2019-3-27 08:25
留记。看着不错。python我在学习中
hunteraa 发表于 2019-3-27 09:00
有点紧张,但还是收藏了
huangfei53 发表于 2019-3-27 10:01
学习了 网址mzitu
耍宝王 发表于 2019-3-27 10:46
代码先放一边,网址我记下了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-16 13:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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