【Python】爬取的图片不对怎么办?Python爬取网页图片小结
相信很多刚开始学习Python的朋友都会对如何网上爬取图片感兴趣,既能练习python,又可以下载精美的图片壁纸。部分网站直接通过图片链接就能下载图片,但最近朋友反馈mm131上面爬取的图片竟然是个二维码。。。被反爬了,在这总结我是如何绕过反爬虫下载最终图片的。
网站页数获取
登录图片总网站比如,https://www.mm131.net/xinggan 通过翻页发现图片网站地址规律为
第一页:https://www.mm131.net/xinggan/
第二页:https://www.mm131.net/xinggan/list_6_2.html
…
第n页:https://www.mm131.net/xinggan/list_6_n.html
根据规律定义各页网站获取地址方法:
def get_page(url,page=10):u1 = urlhtml_list = list()for i in range(1,page):if i == 1:url = u1else:url = u1 + '/list_6_' + str(i) + '.html'req = requests.get(url)req.encoding = 'gb2312'soup = bs4.BeautifulSoup(req.text,'html.parser')html_num = soup.find('div',class_='main')html_num = html_num.find_all('dd')#print (html_num)for each in html_num:if "https://www.mm131.net/xinggan/" in each.a['href']:#print (each.a['href'])html_list.append(each.a['href'])return html_list
以相同的方式获取各组图片的地址
下载图片
点击图片打开检查元素窗口,找到header信息
其中的referer和user-agent信息必须填写,要不下载下来的图片是网页另外的默认图片,一般这个headers信息越全越好。具体下载方法:
def save_img(folder,img_addrs):filename = img_addrs.split('/')[-1]print(img_addrs)print(filename)headers = {'Referer':'http://www.mm131.com/qingchun/4076_5.html','User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}img = requests.get(img_addrs,headers=headers)if img ==1:raise UnboundLocalErrorwith open(filename,'wb') as f:f.write(img.content)
源码
保存图片的目录默认在当前目录以组图名称命名文件夹存储图片,爬取图片的频率太高一般也会被网站识别为爬虫,所以我每次下载图片的时候都随机等待了一段时间,代码如下
import os
import random
import time
import re
import requests
import bs4def get_page(url,page=10):'''获取各组网图第一张图片的地址返回组图url列表'''u1 = urlhtml_list = list()for i in range(1,page):if i == 1:url = u1else:url = u1 + '/list_6_' + str(i) + '.html'req = requests.get(url)req.encoding = 'gb2312'soup = bs4.BeautifulSoup(req.text,'html.parser')html_num = soup.find('div',class_='main')html_num = html_num.find_all('dd')#print (html_num)for each in html_num:if "https://www.mm131.net/xinggan/" in each.a['href']:#print (each.a['href'])html_list.append(each.a['href'])return html_listdef find_image(url):'''找到图片的实际下载地址'''html = requests.get(url)html.encoding =" gb2312"soup = bs4.BeautifulSoup(html.text,'html.parser')picture_html = soup.find_all('div',class_="content-pic")for i in picture_html:picture_html = i.img['src']return picture_htmldef image_dir(url):'''根据图片url获取组图名称'''html = requests.get(url)html.encoding =" gb2312"soup = bs4.BeautifulSoup(html.text,'html.parser')picture_html = soup.find_all('div',class_="content-pic")#picture_html = picture_html.find_all('img')#print (picture_html)for i in picture_html:picture_dir = i.img['alt']print(picture_dir)return picture_dirdef save_img(folder,img_addrs):'''下载图片到folder'''filename = img_addrs.split('/')[-1]print(img_addrs)print(filename)headers = {'Referer':'http://www.mm131.com/qingchun/4076_5.html','User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}img = requests.get(img_addrs,headers=headers)if img ==1:raise UnboundLocalErrorwith open(filename,'wb') as f:f.write(img.content)#创建并进入目录
def cd(folder):'''进入目录,如果不存在则先创建'''m_dir = os.getcwd() + '\\'folder = m_dir + folderprint(folder)try:os.chdir(folder)except FileNotFoundError as reason:print(reason)print("本地无" + folder + "目录,创建目录")os.mkdir(folder)os.chdir(folder)def down_load_mm(folder='xingganmn',pages=2,url=r'http://www.mm131.com/xinggan/'):'''下载图片根据图片的标题信息创建文件夹保存图片'''cd(folder)u1 = url#获取组图url列表page_url_list = get_page(u1,pages)#print(page_url_list)count = 1for page_url in page_url_list:ooxx_dir = home_dir + '\\' + folderos.chdir(ooxx_dir)#下载网图,每个图组的网图数量一般在100以内,这里缺省是下载100页,当网图不存在时进入下一组for j in range(1,100):print(page_url)if j != 1:page_url_type = '.' + page_url.split('.')[-1]page_url = page_url.replace(page_url_type,'_' + j + page_url_type)try:#下载图组第一页时根据图组标题创建存放图组的目录if j == 1:try:dir_name = image_dir(page_url)dir_name = "['" + dir_name.split('(')[0] + "']"print (dir_name)except:print("dir_name目录不存在")dir_name = count#cd(dir_name)f_dir = os.getcwd() + '\\' + dir_nameprint(f_dir)try:#假如之前有相同的目录说明已经下载过,这里就不重复下载了直接breakos.chdir(f_dir)breakexcept FileNotFoundError as reason:print(reason)print("本地无" + f_dir + "目录,创建目录")cd(f_dir)#获取图片下载地址img_addrs = find_image(page_url)save_img(folder,img_addrs)#下载图片的频率太高有可能被服务器的反爬机制检查到所以加了随机等待时间sleeptime = random.randint(3,6)time.sleep(sleeptime)end_tag = 'go on' + str(count) + '_' + str(j)print(end_tag)except:print (str(dir_name) + ":目录的图片数量是:" + str(j))breakcount += 1sleeptimeb = random.randint(50,67)time.sleep(sleeptimeb)if __name__ == "__main__":home_dir = os.getcwd()os.chdir(home_dir)down_load_mm(pages=100)
【Python】爬取的图片不对怎么办?Python爬取网页图片小结相关推荐
- python抓取贴吧_python抓取百度贴吧-校花吧,网页图片
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #!/usr/bin/python3 #code=utf-8 import urllib.request import re path = "C ...
- html插入图片出现红叉,网页图片显示红色叉怎么回事 网页图片有些不显示的有效解决方法...
浏览各种网页是很多小伙伴们的日常,所以很多的网页知识都大概知道,当然也会遇到一些网页上的问题,比如说在浏览网页时图片全部不显示并且有红叉,相信大多数的朋友都会瞬间关闭然后打开另外一个页面,如果这张图片 ...
- 服务器网页图片显示不了怎么办啊,网页图片显示不出来怎么办 网络故障解决【详解】...
网页图片显示不出来怎么办? 文字与图片是构成一个网页的两个最基本的元素.你可以简单地理解为:文字,就是网页的内容.图片,就是网页的美观.除此之外,网页的元素还包括动画.音乐.程序等等. 有时候我们浏览 ...
- 网页图片采集-网页图片采集软件免费
一款免费的网页图片采集软件可以采集网页上的各种图片,每个人都可以采集到各种高清图源.支持任意格式的图片采集,只需要导入链接即可批量采集图片. 还有更多的采集方式:输入关键词全网图片采集/任意网站所有图 ...
- php网页第一张图片不显示不出来了_网页图片不能显示|网页不显示图片|网页图片显示不出来 - 网页图片无法显示的解决方法 - 安全专题...
网络上丰富的图文资源极大地丰富了我们的生活,也提供了许多生动的信息.然而,许多网友在浏览网页时遇到网页图片不能显示的问题,给网络应用带来了很大的不便.造成网页图片不能显示的原因很多,现在,我们通过多种 ...
- python爬虫图片-如何用Python来制作简单的爬虫,爬取到你想要的图片
原标题:如何用Python来制作简单的爬虫,爬取到你想要的图片 在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我 ...
- 用python爬虫爬取无水印图片_使用python 爬虫,爬取图片
一.需求: 用python实现去内涵段子里面下载网页当中的图片到本地当中 二.实现: 1.获取要爬取的URL地址 2.设置headers 3.请求网页内容,把html内容转换成XML 4.解析地址内容 ...
- Python学习笔记:爬取网页图片
Python学习笔记:爬取网页图片 上次我们利用requests与BeautifulSoup爬取了豆瓣<下町火箭>短评,这次我们来学习爬取网页图片. 比如想爬取下面这张网页的所有图片.网址 ...
- python千人成像_Python实现千图成像:从图片爬取到图片合成
千图成像:用N张图片拼凑成一张图片. 实现原理:先将所要成像的图片转化成马赛克图片,然后从图库中用对应颜色的图片替换相应色块. 图库中的图片处理:标记图库中每张图片的混合颜色,用于替换目标色块,并记录 ...
- python爬虫正则表达式爬取网页标签_Python爬虫实例(4)-用urllib、re和正则表达式爬取网页图片...
文章目录简介正则爬虫Demo本例知识点 简介 python的第三方包极多种,尽量多看多用,对开发者来说是很好的.在爬虫领域,请求网页,除了requests包之外,还有urllib.request模块: ...
最新文章
- cacti忘记密码怎么办
- Servlet程序自动加载
- 转型会员制,云集能否讲好电商下半场故事?
- Android性能测试-内存
- 2019年Java Web学习笔记目录
- CentOS 6.3 源码编译安装Apache
- html新闻上下自动滚动代码,jQuery网站公告上下滚动自动轮播代码
- EGLImage使用记录
- 测试电池耗电快的软件,笔记本耗电过快?Win10自带电池检测了解下
- Aspose PDF预览出现乱码
- linux检测不到声卡设备,解决 Deepin V20、Ubuntu 20.04、Linux Mint 20 声卡无法识别导致的没有声音...
- 微信安装旧版本方法(抓包必备)
- page fault
- 使用Spring Data MongoDB操作SequoiaDB巨杉数据库简易教程
- 实践:手把手教你写滴滴打车 APP
- 正式加入阿里巴巴!跟Android初学者分享几点经验,附超全教程文档
- 10000php换人民币,转 数字转大写人民币
- 股票大作手回忆录(读书笔记)
- 二叉树与哈希表以及基本算法
- java 反射 getter,java – 通过反射调用getter的最佳方式