首页 编程教程正文

Python3多线程爬取妹子图的图片

piaodoo 编程教程 2020-02-22 22:07:24 996 0 python教程

本文来源吾爱破解论坛

我也来写个爬虫,主要爬取妹子图网站的图片,使用前需要确认你的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()

QQ截图20190326234126.png (392.38 KB, 下载次数: 26)

下载附件  保存到相册

2019-3-26 23:43 上传

下载的文件

下载的文件

QQ截图20190326234030.png (224.62 KB, 下载次数: 8)

下载附件  保存到相册

2019-3-26 23:42 上传

下载结果

下载结果

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7604.html

搜索