作者 | 旧时晚风拂晓城       编辑 | JackTian

来源 | 杰哥的IT之旅(ID:Jake_Internet)

原文链接:https://blog.csdn.net/fyfugoyfa/article/details/107734468

1. 爬取一页的图片

正则匹配提取图片数据

网页源代码部分截图如下:

重新设置 GBK 编码解决了乱码问题

代码实现:

import requests
import re# 设置保存路径
path = r'D:\test\picture_1\ '
# 目标url
url = "http://pic.netbian.com/4kmeinv/index.html"
# 伪装请求头  防止被反爬
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1","Referer": "http://pic.netbian.com/4kmeinv/index.html"
}# 发送请求  获取响应
response = requests.get(url, headers=headers)
# 打印网页源代码来看  乱码   重新设置编码解决编码问题
# 内容正常显示  便于之后提取数据
response.encoding = 'GBK'# 正则匹配提取想要的数据  得到图片链接和名称
img_info = re.findall('img src="(.*?)" alt="(.*?)" /', response.text)for src, name in img_info:img_url = 'http://pic.netbian.com' + src   # 加上 'http://pic.netbian.com'才是真正的图片urlimg_content = requests.get(img_url, headers=headers).contentimg_name = name + '.jpg'with open(path + img_name, 'wb') as f:     # 图片保存到本地print(f"正在为您下载图片:{img_name}")f.write(img_content)

Xpath定位提取图片数据

代码实现:

import requests
from lxml import etree# 设置保存路径
path = r'D:\test\picture_1\ '
# 目标url
url = "http://pic.netbian.com/4kmeinv/index.html"
# 伪装请求头  防止被反爬
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1","Referer": "http://pic.netbian.com/4kmeinv/index.html"
}# 发送请求  获取响应
response = requests.get(url, headers=headers)
# 打印网页源代码来看  乱码   重新设置编码解决编码问题
# 内容正常显示  便于之后提取数据
response.encoding = 'GBK'
html = etree.HTML(response.text)
# xpath定位提取想要的数据  得到图片链接和名称
img_src = html.xpath('//ul[@class="clearfix"]/li/a/img/@src')
# 列表推导式   得到真正的图片url
img_src = ['http://pic.netbian.com' + x for x in img_src]
img_alt = html.xpath('//ul[@class="clearfix"]/li/a/img/@alt')for src, name in zip(img_src, img_alt):img_content = requests.get(src, headers=headers).contentimg_name = name + '.jpg'with open(path + img_name, 'wb') as f:   # 图片保存到本地print(f"正在为您下载图片:{img_name}")f.write(img_content)

2.翻页爬取,实现批量下载

单线程版

import requests
from lxml import etree
import datetime
import time# 设置保存路径
path = r'D:\test\picture_1\ '
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1","Referer": "http://pic.netbian.com/4kmeinv/index.html"
}
start = datetime.datetime.now()def get_img(urls):for url in urls:# 发送请求  获取响应response = requests.get(url, headers=headers)# 打印网页源代码来看  乱码   重新设置编码解决编码问题# 内容正常显示  便于之后提取数据response.encoding = 'GBK'html = etree.HTML(response.text)# xpath定位提取想要的数据  得到图片链接和名称img_src = html.xpath('//ul[@class="clearfix"]/li/a/img/@src')# 列表推导式   得到真正的图片urlimg_src = ['http://pic.netbian.com' + x for x in img_src]img_alt = html.xpath('//ul[@class="clearfix"]/li/a/img/@alt')for src, name in zip(img_src, img_alt):img_content = requests.get(src, headers=headers).contentimg_name = name + '.jpg'with open(path + img_name, 'wb') as f:  # 图片保存到本地# print(f"正在为您下载图片:{img_name}")f.write(img_content)time.sleep(1)def main():# 要请求的url列表url_list = ['http://pic.netbian.com/4kmeinv/index.html'] + [f'http://pic.netbian.com/4kmeinv/index_{i}.html' for i in range(2, 11)]get_img(url_list)delta = (datetime.datetime.now() - start).total_seconds()print(f"抓取10页图片用时:{delta}s")if __name__ == '__main__':main()

程序运行成功,抓取了10页的图片,共210张,用时63.682837s。

多线程版

import requests
from lxml import etree
import datetime
import time
import random
from concurrent.futures import ThreadPoolExecutor# 设置保存路径
path = r'D:\test\picture_1\ '
user_agent = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"]
start = datetime.datetime.now()def get_img(url):headers = {"User-Agent": random.choice(user_agent),"Referer": "http://pic.netbian.com/4kmeinv/index.html"}# 发送请求  获取响应response = requests.get(url, headers=headers)# 打印网页源代码来看  乱码   重新设置编码解决编码问题# 内容正常显示  便于之后提取数据response.encoding = 'GBK'html = etree.HTML(response.text)# xpath定位提取想要的数据  得到图片链接和名称img_src = html.xpath('//ul[@class="clearfix"]/li/a/img/@src')# 列表推导式   得到真正的图片urlimg_src = ['http://pic.netbian.com' + x for x in img_src]img_alt = html.xpath('//ul[@class="clearfix"]/li/a/img/@alt')for src, name in zip(img_src, img_alt):img_content = requests.get(src, headers=headers).contentimg_name = name + '.jpg'with open(path + img_name, 'wb') as f:  # 图片保存到本地# print(f"正在为您下载图片:{img_name}")f.write(img_content)time.sleep(random.randint(1, 2))def main():# 要请求的url列表url_list = ['http://pic.netbian.com/4kmeinv/index.html'] + [f'http://pic.netbian.com/4kmeinv/index_{i}.html' for i in range(2, 51)]with ThreadPoolExecutor(max_workers=6) as executor:executor.map(get_img, url_list)delta = (datetime.datetime.now() - start).total_seconds()print(f"爬取50页图片用时:{delta}s")if __name__ == '__main__':main()

程序运行成功,抓取了50页图片,共1047张,用时56.71979s。开多线程大大提高的爬取数据的效率。

最终成果如下:

3. 其他说明


由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:(1)点击页面最上方“小詹学Python”,进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心。

总说手机没有“好壁纸”,Python一次性抓取500张“美女”图片,够不够用!相关推荐

  1. python美女源代码_单身程序员,每晚用python抓取百万张美女图片,连女友都不想找了...

    每当夜深人静时,这位长期单身的程序员就会起床开电脑,然后用python抓取百万张美女图片,存进U盘,目的目前还不知道,但技术是万能的,这样一来,可能连找女朋友的钱都省了. 其实,还有更好看的! 而且还 ...

  2. 美图收割机,老司机带你用Python,轻松获取1000张美女图片

    牛老师是一个滴水之恩当涌泉相报的人. 看着群里小伙伴们的无私分享,再看看自己空空如也的文件夹,我羞愧的低下了头 . 为了能回报小伙伴,和广大无私的网友 牛老师毅然决然的做出了这个造福人民的决定 靠着这 ...

  3. 用python画爱心动图_编写Python爬虫抓取暴走漫画上gif图片的实例分享

    本文要介绍的爬虫是抓取暴走漫画上的GIF趣图,方便离线观看.爬虫用的是python3.3开发的,主要用到了urllib.request和BeautifulSoup模块. urllib模块提供了从万维网 ...

  4. gif提取 python_编写Python爬虫抓取暴走漫画上gif图片的实例分享

    本文要介绍的爬虫是抓取暴走漫画上的GIF趣图,方便离线观看.爬虫用的是python3.3开发的,主要用到了urllib.request和BeautifulSoup模块. urllib模块提供了从万维网 ...

  5. Python爬虫实战,requests模块,Python实现抓取某站美女壁纸

    前言 这一期我们会带大家进一步复现我们的魔塔小游戏,主要内容为进一步完成和其他更为复杂的地图元素接触时可以触发的事件. 废话不多说,让我们愉快地开始吧~ 开发工具 Python版本: 3.7.4 相关 ...

  6. Python多线程爬取7160网站美女图片

    直接上代码 #coding=UTF-8 from urllib.request import urlopen from pyquery import PyQuery as pq import re i ...

  7. python爬虫app步骤_Python爬虫抓取手机APP的传输数据,python爬虫抓取app

    Python爬虫抓取手机APP的传输数据,python爬虫抓取app 大多数APP里面返回的是json格式数据,或者一堆加密过的数据 .这里以超级课程表APP为例,抓取超级课程表里用户发的话题. 1. ...

  8. Python 多线程抓取网页 牛人 use raw socket implement http request great

    Python 多线程抓取网页 - 糖拌咸鱼 - 博客园 Python 多线程抓取网页 最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术 ...

  9. python爬虫招聘-Python爬虫抓取智联招聘(基础版)

    原标题:Python爬虫抓取智联招聘(基础版) 作者:C与Python实战 「若你有原创文章想与大家分享,欢迎投稿.」 对于每个上班族来说,总要经历几次换工作,如何在网上挑到心仪的工作?如何提前为心仪 ...

最新文章

  1. .net 文件服务器系统,File-service基于ASP.NET Core的可伸缩、通用的文件服务器
  2. 若依管理系统源码分析-导出Excel时怎样通过注解中readConverterExp实现格式化导出列的显示格式(0和1格式化为是否)
  3. 微信小程序把玩(三十二)Image API
  4. zookeeper使用和原理探究
  5. windows10 下使用Pycharm2016 基于Anaconda3 Python3.6 安装Mysql驱动总结
  6. python向excel写数据_Python向excel中写入数据的方法
  7. 程序理解与程序员的未来
  8. 大数据技术全解之三分虚拟化技术、七分分布式管理、十二分大数据
  9. MAXScript语法及命令
  10. 学习Linux Bridge与利用Bridge创建虚拟网络
  11. DeFi 2.0的LaaS协议Elephant,或许是你熊市下为数不多的获利手段
  12. 逻辑斯谛回归(logistic regression)
  13. 转载-css 属性clip-path之多边形polygon小窥
  14. Springboot Actuator未授权访问漏洞复现
  15. 如何从GitHub上面下载Java项目,并用IDEA导入该项目跑起来?
  16. 百度网盘网页倍速播放视频的小技巧
  17. 未来智能手机摄像技术发展趋势:硬件
  18. PinPoint使用教程
  19. 预测未来的神技——有趣的马尔科夫链
  20. 321电分——各种不对称短路时故障处的短路电流和电压

热门文章

  1. 程序包org.springframework.stereotype不存在,解决办法
  2. Python实现顺序表
  3. PHP扩展CURL的用法详解
  4. 反思深度思考:预热[准备] 高密度[压力专注] 辨真伪[冷静分析] 反推[灵活] 结构化[全局]
  5. 反思学习方法:后推前 前推后
  6. mysql set schema_Mysql数据库优化学习之一 Schema优化
  7. php+签到+二进制方式,PHP开发中如何实现二进制搜索?
  8. mac java sh_怎么在Mac上下载java?
  9. python 扯线木偶_Python计算器求助~求大神指导~QAQ急!
  10. wordpress 表格文字对齐_Word文字对齐还用空格键?OUT了,这3个文字对齐方式你值得拥有!...