Python简单爬虫包Helium实现百度图片批量下载
python爬虫爬取图片的简单代码
python爬⾍爬取图⽚的简单代码Python是很好的爬⾍⼯具不⽤再说了,它可以满⾜我们爬取⽹络内容的需求,那最简单的爬取⽹络上的图⽚,可以通过很简单的⽅法实现。
只需导⼊正则表达式模块,并利⽤spider原理通过使⽤定义函数的⽅法可以轻松的实现爬取图⽚的需求。
1、spider原理spider就是定义爬取的动作及分析⽹站的地⽅。
以初始的URL**初始化Request**,并设置回调函数。
当该request**下载完毕并返回时,将⽣成**response ,并作为参数传给该回调函数。
2、实现python爬⾍爬取图⽚第⼀步:导⼊正则表达式模块import re # 导⼊正则表达式模块import requests # python HTTP客户端编写爬⾍和测试服务器经常⽤到的模块import random # 随机⽣成⼀个数,范围[0,1]第⼆步:使⽤定义函数的⽅法爬取图⽚def spiderPic(html, keyword):print('正在查找 ' + keyword + ' 对应的图⽚,下载中,请稍后......')for addr in re.findall('"objURL":"(.*?)"', html, re.S): # 查找URLprint('正在爬取URL地址:' + str(addr)[0:30] + '...')# 爬取的地址长度超过30时,⽤'...'代替后⾯的内容try:pics = requests.get(addr, timeout=100) # 请求URL时间(最⼤10秒)except requests.exceptions.ConnectionError:print('您当前请求的URL地址出现错误')continuefq = open('H:\\img\\' + (keyword + '_' + str(random.randrange(0, 1000, 4)) + '.jpg'), 'wb')# 下载图⽚,并保存和命名fq.write(pics.content)fq.close()到此这篇关于python爬⾍爬取图⽚的简单代码的⽂章就介绍到这了,更多相关python爬⾍怎么爬取图⽚内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
爬虫——爬取百度贴吧每个帖子里面的图片
爬⾍——爬取百度贴吧每个帖⼦⾥⾯的图⽚现在我们⽤正则来做⼀个简单的爬⾍,我们尝试爬取某个百度贴吧⾥⾯的所有帖⼦,并且将这个帖⼦⾥⾸页每个楼层发布的图⽚下载到本地。
分析:以美⼥吧为例 ……可以发现,url地址中pn及其前⾯的部分是相同的,改变的只是pn后⾯的值不难发现,每页中共有50个帖⼦,所有pn的值是以每页50的值递增。
则第page页的pn值为:(page - 1) * 50⽽kw=%E7%BE%8E%E5%A5%B3为urllib.parse.urlencode{"kw":"美⼥"}#!/usr/bin/python3# -*- coding:utf-8 -*-__author__ = 'mayi'"""⽤正则做⼀个简单的爬⾍:尝试爬取某个贴吧⾥的所有帖⼦,并且将帖⼦⾥每层楼发布的图⽚下载到本地。
例:美⼥吧(https:///f? + kw=%E7%BE%8E%E5%A5%B3 + &pn=50)https:///f?kw=%E7%BE%8E%E5%A5%B3&pn=50其中:kw=%E7%BE%8E%E5%A5%B3为urllib.parse.urlencode({"kw":"美⼥"})pn为值从0开始,每页为50个帖⼦,故:第⼀页,pn的值为:0第⼆页,pn的值为:50第三页,pn的值为:100……"""import osimport reimport urllib.request# ⼀个爬⾍类class Spider(object):"""⼀个爬⾍类"""# 初始化def __init__(self, name):"""类的初始化:param name: 百度贴吧名:return:"""# User-Agent头self.header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}keyword = urllib.parse.urlencode({"kw":name})self.url = "https:///f?" + keyword + "&pn="self.run()# 获取帖⼦的最后⼀页def getLastPage(self, url):"""获取url帖⼦的尾页的pn值:param url: url地址:return: pn值"""html = self.loadPage(url)html = html.decode("utf-8")# 利⽤正则匹配尾页的pn值pattern = pile(r'<a href=.*?pn=(\d+).*?>尾页</a>')try:pn = pattern.findall(html)[0]pn = int(pn)except:pn = 1return pn# 爬⾍开始⼯作def run(self):"""爬⾍开始⼯作:return:"""start_page = 1end_page = self.getLastPage(self.url) // 50 + 1print("该吧共" + str(end_page) + "页")for page in range(start_page, end_page + 1):# 计算pn的值pn = (page - 1) * 50# 拼接成完整的url地址full_url = self.url + str(pn)# 调⽤loadPage()函数,下载full_url的页⾯内容html = self.loadPage(full_url)# 调⽤screenPage()函数,筛选下载的页⾯内容item_list = self.screenPage(html)print("正在下载第" + str(page) + "页,共" + str(len(item_list)) + "个帖⼦")# 调⽤loadImage()函数,下载帖⼦⾥⾸页的图⽚self.loadImage(item_list)# 下载⽹页内容def loadPage(self, url):"""下载url的页⾯内容:param url: 需下载页码的url地址:return: 页⾯内容"""# url 连同 headers,⼀起构造Request请求,这个请求将附带 chrome 浏览器的User-Agent request = urllib.request.Request(url, headers = self.header)# 向服务器发送这个请求response = urllib.request.urlopen(request)# 获取⽹页内容:byteshtml = response.read()return html# 筛选内容def screenPage(self, html):"""筛选内容:筛选出每层楼帖⼦的链接:param html: 页⾯内容:return: 需下载的图⽚链接地址"""# 转码:bytes转utf-8html = html.decode("utf-8")# 利⽤正则匹配每层楼帖⼦的链接pattern = pile(r'<a href="(/p/\d+).*?>.*?</a>', re.S)item_list = pattern.findall(html)return item_list# 下载帖⼦⾥⾸页⾥⾯的图⽚def loadImage(self, item_list):"""下载帖⼦⾥⾸页⾥⾯的图⽚:param item_list: 需下载图⽚的帖⼦的ID列表:return: None"""for id in item_list:# 根据id拼接帖⼦链接link = "https://" + idstart_page = 1end_page = self.getLastPage(link)print("正在下载帖⼦:" + link + " 中图⽚")image_no = 0for page in range(start_page, end_page + 1):# 拼接完整链接full_link = link + "?pn=" + str(page)# 获取需下载图⽚的帖⼦的页⾯内容html = self.loadPage(full_link)# 转码:bytes转utf-8html = html.decode("utf-8")# 利⽤正则匹配帖⼦中的图⽚链接pattern = pile(r'<img class="BDE_Image".*?src="(.*?)".*?>', re.S)# 图⽚链接列表image_list = pattern.findall(html)for image in image_list:image_no = image_no + 1self.writeImage(image, id[3:], image_no)print("帖⼦:" + full_link + " 共下载" + str(len(image_list)) + "个图⽚")# 向本地磁盘中存储图⽚def writeImage(self, url, id, image_no):"""向本地磁盘中存储图⽚:param url: 图⽚url:param id: 帖⼦id:本地⽂件夹:param image_no: 图⽚序号:return:"""# 判断是否存在对应的⽂件夹if not os.path.exists("image/" + id):# 若不存在,则创建os.makedirs("image/" + id)# 图⽚⽂件名:id + "_" + 5位图⽚序号image_no = str(image_no)file_name = "image/" + id + "/" + id + "_" + "0" * (6 - len(image_no)) + image_no + ".jpg" # 以wb⽅式打开⽂件file = open(file_name, "wb")# 获取图⽚名为名为images = self.loadPage(url)# 写⼊图⽚file.write(images)# 关闭⽂件file.close()# 主函数if __name__ == '__main__':# 要爬取的百度贴吧名name = input("请输⼊您要爬取的百度贴吧名:")# 创建⼀个爬⾍对象mySpider = Spider(name)。
7个经典python爬虫案例代码分享
Python作为一种简单易学的编程语言,广受程序员和数据科学家的喜爱。
其中,用Python进行网络爬虫的应用也越来越广泛。
本文将共享7个经典的Python爬虫案例代码,希望能够给大家带来启发和帮助。
1. 爬取豆瓣电影排行榜数据在本例中,我们将使用Python的requests库和BeautifulSoup库来爬取豆瓣电影排行榜的数据。
我们需要发送HTTP请求获取网页内容,然后使用BeautifulSoup库解析HTML文档,提取出我们需要的电影名称、评分等信息。
我们可以将这些数据保存到本地或者进行进一步的分析。
```pythonimport requestsfrom bs4 import BeautifulSoupurl = 'response = requests.get(url)soup = BeautifulSoup(response.text, 'html.parser')for movie in soup.find_all('div', class_='item'):title = movie.find('span', class_='title').textrating = movie.find('span', class_='rating_num').textprint(title, rating)```2. 爬取博博用户信息在这个案例中,我们将利用Python的requests库和正则表达式来爬取博博用户的基本信息。
我们需要登录博博并获取用户主页的URL,然后发送HTTP请求获取用户主页的HTML文档。
我们可以使用正则表达式来提取用户的昵称、性别、位置区域等信息。
我们可以将这些信息保存到数据库或者进行其他处理。
```pythonimport requestsimport reurl = 'response = requests.get(url)pattern = repile(r'<title>(.*?)</title>.*?昵称:(.*?)<.*?性别:(.*?)<.*?地区:(.*?)<', re.S)result = re.search(pattern, response.text)if result:username = result.group(2)gender = result.group(3)location = result.group(4)print(username, gender, location)```3. 爬取新浪新闻在这个案例中,我们将使用Python的requests库和XPath来爬取新浪新闻的标题和信息。
python批量爬取图片并保存在本地文件夹下...
python批量爬取图片并保存在本地文件夹下...python批量爬取图片并保存在本地文件夹下本人目前是山西农业大学软件学院大三的一名学生,由于疫情严重,积极响应党和国家的号召宅在家中,今日闲来无事,就对学院的官网下手啦,将官网上介绍学院的老师的照片全部爬取下来,留作毕业后自己慢慢怀念吧,话不多说,进入正题,开搞!1.导入的包我们一共需要使用到四个包time包,用来设置间隔时间,防止把网页爬崩(要是真的爬崩了我估计要倒大霉喽)requess包,当然是用来获取网页的源代码和处理相应的啦BeautifulSoup包,用来对网页内容进行准确的抓取,具体的使用方法以后我会写道os包,文件处理最重要最常用的包,用来创建文件名等import timeimport requestsfrom bs4 import BeautifulSoupimport os2.抓取网页的源代啥也不用说,直接上代码,增加了容错的机制,很好理解的,一看就懂#封装方法用来爬取网页的源代码def getHTML(url):try:r = requests.get(url,timeout = 30,headers = hd)r.raise_for_status() #容错机制,若请求访问失败则返回的不是200,则返回字符串空r.encoding = r.apparent_encoding #设置编码方式,用解析返回网页源码得出的编码方式代替 UTF-8return r.textexcept:return ''其中需要说明的就是更改requests请求的头部,虽然官网对爬虫没有任何限制,处于习惯,还是更改一下头部更好啦hd = {'user-agent':'chorme/10'}#更改requests请求的头信息,用来防止网页的反爬虫,也可来伪装自己访问网页的信息,这里用最简单的chorm(浏览器)版本10代替3.对网页进行解析,从中获取自己想要的图片链接查看网页的源码,来看爬取图片的所在的标签,上图说话可以直观的看出,自己想要爬取的图片的相关信息都在img标签当中,所以接下来就把所有的img标签爬取,并对其进行分析即可,但是观察发现,不知道问什么,每一张图片的img标签竟然不同,不可以使用正则表达式,而且最气人的是,有的图片有直接在属性中给出相应的下载链接,但有的没有,只能自己拼接,哎,只能使用基本的方法喽,上代码!url = '/info/1013/2388.htm' #爬取网页的urlpicture = 'http://211.82.8.2:8080/system/_owners/soft/_webprj/' #设置下载图片的头部,根据网页源码得出,并不是每一个img标签都有相对应的图片下载链接,但都有相应的src,这里为最后的保存图片做准备text = getHTML(url)soup = BeautifulSoup(text,'html.parser')a = soup.find_all('img') #直接找出所有的img标签,观察发现每个图片的img标签并不一样,不能用正则表达式来统一查找urlInfo = [] #用来保存每一个图片拼接好的下载链接for tag in a:new_url = tag.attrs['src'] #得到img属性当中的srcurlInfo.append(picture+new_url.split('/',2)[-1]) #通过spilt函数剪切src并于之前的图片头部进行拼接,得到每个图片的下载地址每行代码后都有详细的注释哟,拼接这个下载链接真的让我废了功夫,体现出一个初学者的心酸。
批量爬取网页资源(图片、视频、文档等)方法
批量爬取网页资源(图片、视频、文档等)方法
一.在网上搜“chrono Chrome下载管理器”,下载往后解压开来,得到一个crx文件。
二:点击谷歌浏览器右上角三个点,在更多工具选择扩展程序。
三:在扩展程序界面打开开发者模式。
四:将解压的crx文件拖动到扩展程序界面。
五:重新刷新需要下载资源的网站,在右上角点击扩展中心,点击Chrono下载器。
六:点击右上角切换到资源嗅探模式,继而选择需要批量下载的资源即可。
往期推荐:ARCGIS建模技术进阶之(解析路径、多值、模型中调用模型)(五)
ARCGIS进阶建模之(创建要素图层、反馈变量、模型迭代、%n%)(六)
ARCGIS进阶模型之”计算值“案例(七)
ARCGIS模型进阶之仅模型工具的获得字段值运用(八)
ARCGIS模型进阶之线分割面.保留属性案例(九)
批量生成文件夹bat
ARCGIS属性域导出表工具
搭建开源地图服务平台GeoServer及发布地图服务全套教程。
python使用selenium实现批量文件下载
python使⽤selenium实现批量⽂件下载背景实现需求:批量下载联想某型号的全部驱动程序。
⼀般在做⽹络爬⾍的时候,都是保存⽹页信息为主,或者下载单个⽂件。
当涉及到多⽂件批量下载的时候,由于下载所需时间不定,下载的⽂件名不定,所以有⼀定的困难。
思路参数配置在涉及下载的时候,需要先对chromedriver进⾏参数配置,设定默认下载⽬录:global base_pathprofile = {'download.default_directory': base_path}chrome_options = webdriver.ChromeOptions()chrome_options.add_experimental_option('prefs', profile)driver = webdriver.Chrome(executable_path='../common/chromedriver', options=chrome_options)driver.implicitly_wait(10)页⾯分析联想官⽹上每个型号的驱动下载页⾯如上图所⽰,虽然前⾯有⼀个登陆的遮罩,但是实际上并不影响点击。
需要注意的是:驱动列表,需要点击才可以显⽰具体的下载项⽬表格,否则可以找到对应元素但⽆法获取正确的信息driver_list.find_element_by_class_name('download-center_list_t_icon').click()每个下载列表的表头建议做跳过处理if sub_list.find_element_by_class_name('download-center_usblist_td01').text == '驱动名称':continue下载处理在页⾯中,找到“普通下载”的元素,点击即可下载。
利用Python实现简单图片下载功能
利用Python实现简单图片下载功能我们有时候会需要在网上查找并下载图片,当数量比较少的时候,点击右键保存,很轻松就可以实现图片的下载,但是有些图片进行了特殊设置,点击右键没有显示保存选项,或者需要下载很多图片,这样的情况,写一段Python爬虫代码就可以轻松解决!一、页面抓取#coding=utf-8import urllibdef getHtml(url):page = urllib.urlopen(url)html = page.read()return htmlhtml = getHtml("https:///p/5582243679")print html页面数据抓取过程定义了getHtml()函数,其作用是给getHtml()传递一个网址,最终进行整个页面的下载。
二、页面数据筛选import reimport urllibdef getHtml(url):page = urllib.urlopen(url)html = page.read()return htmldef getImg(html):reg = r'src="(.+?\.jpg)" pic_ext'imgre = pile(reg)imglist = re.findall(imgre,html)return imglisthtml = getHtml("https:///p/5582243679")print getImg(html)页面数据筛选中,定义了一个新的函数getImg(),该函数的功能是筛选出.jpg格式的图片地址。
三、图片下载#coding=utf-8import urllibimport redef getHtml(url):page = urllib.urlopen(url)html = page.read()return htmldef getImg(html):reg = r'src="(.+?\.jpg)" pic_ext'imgre = pile(reg)imglist = re.findall(imgre,html)x = 0for imgurl in imglist:urllib.urlretrieve(imgurl,'%s.jpg' % x)x+=1html = getHtml("https:///p/5582243679")print getImg(html)通过for循环获得所有符合条件的图片网址,并采用urllib.urlretrieve()方法,将远程数据下载到本地,并重新命名!。
用Python爬去百度贴吧图片并保存到本地
03 将页面筛选的数据保存到本地 通过一个 for 循环对获取的图片连接进行遍历,为了使图片的文件名看上 去更规范,对其进行重命名,命名规则通过 x 变量加 1。保存的位置默认为 程序的存放目录。 程序运行完成,将在目录下看到下载thon 提供了非常强大的正则表达式,我们需要先要了解一点 pyth看工具。找到了图”jpeg” 我们又创建了 getImg()函数,用于在获取的整个页面中筛选需要的图片连 接。re 模块主要包含了正则表达式: repile() 可以把正则表达式编译成一个正则表达式对象. re.findall() 方法读取 html 中包含 imgre(正则表达式)的数据。 运行脚本将得到整个页面中包含图片的 URL是 很熟练,其中难点在于正则表达式的理解; 说明 01 获取整个页面数据 Urllib 模块提供了读取 web 页面数据的接口,我们可以像读取本地文件 一样读取 www 和 ftp 上的数据。首先,我们定义了一个 getHtml()函数: urllib.urlopen()方法用于打开一个 URL 地址。 read()方法用于读取 URL 上的数据,向 getHtml()函数传递一个网址,并 把整个页面下载下来。执行程序就会把整个网页打印输出。
python下载图片实现方法(超简单)
python下载图⽚实现⽅法(超简单)我们有时候会需要在⽹上查找并下载图⽚,当数量⽐较少的时候,点击右键保存,很轻松就可以实现图⽚的下载,但是有些图⽚进⾏了特殊设置,点击右键没有显⽰保存选项,或者需要下载很多图⽚,这样的情况,写⼀段Python爬⾍代码就可以轻松解决!⼀、页⾯抓取#coding=utf-8 import urllib def getHtml(url): page = urllib.urlopen(url) html = page.read() return html html = getHtml("https:///p/5582243679") print html页⾯数据抓取过程定义了getHtml()函数,其作⽤是给getHtml()传递⼀个⽹址,最终进⾏整个页⾯的下载。
⼆、页⾯数据筛选import re import urllib def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImg(html): reg = r'src="(.+?\.jpg)" pic_ext' imgre = pile(reg) imglist = re.findall(imgre,html) return imglist html = getHtml("https:///p/5582243679") print getImg(html)页⾯数据筛选中,定义了⼀个新的函数getImg(),该函数的功能是筛选出.jpg格式的图⽚地址。
三、图⽚下载#coding=utf-8 import urllib import re def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImg(html): reg = r'src="(.+?\.jpg)" pic_ext' imgre = pile(reg) imglist = re.findall(imgre,html) x = 0 for imgurl in imglist: urllib.urlretrieve(imgurl,'%s.jpg' % x) x+=1 html = getHtml("https:///p/5582243679") print getImg(html)通过for循环获得所有符合条件的图⽚⽹址,并采⽤urllib.urlretrieve()⽅法,将远程数据下载到本地,并重新命名!以下是补充如下所⽰:import urllib.requestresponse = urllib.request.urlopen('https:///g/500/600')cat_img = response.read()with open('cat_500_600.jpg','wb') as f:f.write(cat_img)urlopen()括号⾥既可以是⼀个字符串也可以是⼀个request对象,当传⼊字符串的时候会转换成⼀个request对象,因此代码response = urllib.request.urlopen('https:///g/500/600') 也可以写成req = urllib.request.Request('https:///g/500/600')1、response = urllib.request.urlopen(req)2、responce还有geturl,info,getcode⽅法代码with open('cat_500_600.jpg','wb') as f:f.write(cat_img)等价于1、f = open('cat_500_600.jpg','wb')2、try:3、 data = f.write(cat_img)4、finally:5、 f.close()以上这篇python下载图⽚实现⽅法(超简单)就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
python实现爬取百度图片的方法示例
python实现爬取百度图⽚的⽅法⽰例本⽂实例讲述了python实现爬取百度图⽚的⽅法。
分享给⼤家供⼤家参考,具体如下:import jsonimport itertoolsimport urllibimport requestsimport osimport reimport sysword=input("请输⼊关键字:")path="./ok"if not os.path.exists(path):os.mkdir(path)word=urllib.parse.quote(word)url = r"/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&fp=result&queryWord={word}&cl=2&lm=-1&ie=utf-8&oe=utf-8&st=-1&ic=0&word={word}&face=0&istype=2nc=1&pn={pn}&rn=60" urls=(url.format(word=word,pn=x)for x in itertools.count(start=0,step=60))index=0str_table = {'_z2C$q': ':','_z&e3B': '.','AzdH3F': '/'}char_table = {'w': 'a','k': 'b','v': 'c','1': 'd','j': 'e','u': 'f','2': 'g','i': 'h','t': 'i','3': 'j','h': 'k','s': 'l','4': 'm','g': 'n','5': 'o','r': 'p','q': 'q','6': 'r','f': 's','p': 't','7': 'u','e': 'v','o': 'w','8': '1','d': '2','n': '3','9': '4','c': '5','m': '6','0': '7','b': '8','l': '9','a': '0'}i=1char_table = {ord(key): ord(value) for key, value in char_table.items()}for url in urls:html=requests.get(url,timeout=10).texta=pile(r'"objURL":"(.*?)"')downURL=re.findall(a,html)for t in downURL:for key, value in str_table.items():t = t.replace(key, value)t=t.translate(char_table)try:html_1=requests.get(t)if str(html_1.status_code)[0]=="4":print('失败1')continueexcept Exception as e:print('失败2')continuewith open(path+"/"+str(i)+".jpg",'wb') as f:f.write(html_1.content)i=i+1更多关于Python相关内容可查看本站专题:《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家Python程序设计有所帮助。
Python智能下载百度上的任意图片!无敌的Python啊
Python智能下载百度上的任意图片!无敌的Python啊自从小编开始每天坚持去写博文和公众号的时候,图片素材的获取就一直困扰着我,每次都需要在百度图库中找很久很久,这种寻找图片,筛选图片的过程,大大消磨了我的精力,以致于有时会影响到我写作灵感,后来,决心自己用python写个任意图片下载脚本,只需要输入关键字,就可以将相应的图片下载下来,接下来,小编就直接上源码。
#python#功能:根据输入的关键字,下载百度图片(https://)中的图片import requestsfrom lxml import etreeimport reimport osimport threadingfrom multiprocessing import Pool#模拟浏览器请求headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}name = input('请输入搜索的关键字:(如风景)')#1定义函数,获取用户访问的URLdef geturl():url = 'https:///search/index?tn=baiduimage&ipn=r &ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1539393278843_R&pv=&ic=0& nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0 &istype=2&ie=utf-8&word={}'.format(name)return urlimageurl = geturl()#2定义函数,获取目标网页源代码中图片的URLdef getimageurl():rep = requests.get(imageurl,headers=headers)rep.encoding='utf-8'rep_result = rep.textrep_re1 = r''objURL':'(.*?)''re_result_jpg = re.findall(rep_re1,rep_result)return re_result_jpgsaveimageurl = getimageurl()#3保存图片到本地def saveimage():dir = nameif dir not in os.listdir():os.makedirs(dir)try:for u in saveimageurl:savename = u[-8:]end = re.search('(.jpg|.jpeg|.png)$',savename) #搜索图片名的后缀if end == None: #如果图片名的后缀为空savename = savename + '.jpg' #给文件名加上jpg的后缀req_url = requests.get(u,headers=headers).contentprint('正在保存图片%s'%savename)with open('./%s/%s'%(dir,savename),'wb') as filesave:filesave.write(req_url)except:pass#多线程下载图片,写的有问题if __name__ =='__main__':saveimage()print('文件保存在当前目录下的' + name + '文件夹下面') 著作权归作者所有。
Python实现批量下载图片的方法
Python实现批量下载图⽚的⽅法本⽂实例讲述了Python实现批量下载图⽚的⽅法。
分享给⼤家供⼤家参考。
具体实现⽅法如下:#!/usr/bin/env python#-*-coding:utf-8-*-'#Filename:download_file.pyimport os,sysimport reimport urllibimport urllib2base_url = 'xxx'array_url = list()pic_url = list()inner_url = list()def get_array_url(array_url,base_url):content = urllib.urlopen(base_url).read()array_url_a = re.findall(r'/rihan.*?.html',content)for url in array_url_a:url_a = 'xxx'+url#print url_aarray_url.append(url_a)def get_inner_url(array_url,inner_url):inner_url.append(array_url)content = urllib.urlopen(array_url[10]).read()content = content.replace(" ","")url_a = re.findall(r'<li>.*?</li>',content)for i in url_a:url = re.findall(r'ahref=\\'.*?.html\\'target',i)if len(url)>0:# print url[0]url_b = re.sub(r'ahref=\\'','',url[0])# print url_burl_c = re.sub(r'\\'target','',url_b)url_c = 'http://xxx/'+re.sub(r'/.*/','',url_c)inner_url.append(url_c)del inner_url[1]# print inner_urldef get_pic_url(pic_url,inner_url,array_url):content = urllib.urlopen(array_url).read()pic_url_a = re.findall(r'center.*?.jpg',content)print 'bbbbbbbbb',len(pic_url_a)pic_url_a = re.findall(r'http://.*.jpg',pic_url_a[0])pic_url.append(pic_url_a[0])j=2for i in inner_url:jj = '/'+str(j)+'.jpg'pic = re.sub(r'/1.jpg',jj,pic_url_a[0])pic_url.append(pic)j = j+1del pic_url[-1]for i in pic_url:print idef urlcallback(a,b,c):"""call back functiona,已下载的数据块b,数据块的⼤⼩c,远程⽂件的⼤⼩"""print "callback"prec=100.0*a*b/cif 100 < prec:prec=100print "%.2f%%"%(prec,)def download(img_url,file_num):for img in img_url:print imgimg_name = re.sub(r'http://.*/','',img)path = 'C:/'+str(file_num)+'/'+img_nameurllib.urlretrieve(img,path,urlcallback)get_array_url(array_url,base_url)file_num = 3#download(pic_url,file_num)get_inner_url(url,inner_url)get_pic_url(pic_url,inner_url,url)'''for url in array_url:print url# get_inner_url(url,inner_url)# get_pic_url(pic_url,inner_url)get_inner_url(url,inner_url)get_pic_url(pic_url,inner_url,url)download(pic_url,file_num)file_num = file_num+1del inner_url[:]del pic_url[:]'''希望本⽂所述对⼤家的Python程序设计有所帮助。
Python爬虫:通过关键字爬取百度图片
Python爬⾍:通过关键字爬取百度图⽚使⽤⼯具:Python2.7scrapy框架sublime text3⼀。
搭建python(Windows版本)1.安装python2.7 ---然后在cmd当中输⼊python,界⾯如下则安装成功2.集成Scrapy框架----输⼊命令⾏:pip install Scrapy安装成功界⾯如下:失败的情况很多,举例⼀种:解决⽅案:其余错误可百度搜索。
⼆。
开始编程。
1. 爬取⽆反爬⾍措施的静态⽹站。
例如百度贴吧,⾖瓣读书。
例如-《桌⾯吧》的⼀个帖⼦https:///p/2460150866?red_tag=3569129009python代码如下:代码注释:引⼊了两个模块urllib,re。
定义两个函数,第⼀个函数是获取整个⽬标⽹页数据,第⼆个函数是在⽬标⽹页中获取⽬标图⽚,遍历⽹页,并且给获取的图⽚按照0开始排序。
注:re模块知识点:爬取图⽚效果图:图⽚保存路径默认在建⽴的.py同⽬录⽂件下。
2.爬取有反爬⾍措施的百度图⽚。
如百度图⽚等。
例如关键字搜索“表情包”https:///search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gbk&word=%B1%ED%C7%E9%B0%FC&fr=ala&ori_query=%E8%A1%A8%E6%83%85%E5%8C%85&ala=0&alatpl=sp&pos=0&hs=2&xthttps=111111图⽚采⽤滚动式加载,先爬取最优先的30张。
代码如下:爬取过程如下:爬取结果:copyriht by WC-cong。
python批量下载图片的三种方法
python批量下载图⽚的三种⽅法 ⼀是⽤微软提供的扩展库win32com来操作IE:win32com可以获得类似js⾥⾯的document对象,但貌似是只读的(⽂档都没找到)。
⼆是⽤selenium的webdriver:selenium则提供了Chrome,IE,FireFox等的⽀持,每种浏览器都有execute_script和find_element_by_xx⽅法,可以⽅便的执⾏js脚本(包括修改元素)和读取html⾥⾯的元素。
不⾜是selenium只提供对python2.6和2.7的⽀持。
三是⽤python⾃带的HTMLParser解析:HTMLParser则是需要⾃⼰写个类继承基类,重写解析元素的⽅法。
1.win32com1#将滚动条滑到底,最多滑动20000像素2#模拟键盘右键,查看多张图⽚3import sys4import win32com.client,win32api5import urllib.request6import time7import os8def main():9#获取参数10 url=sys.argv[1]11#操作IE12 ie=win32com.client.Dispatch("InternetExplorer.Application")13 ie.Navigate(url)14 ie.Visible=True15 last_url=''16 dir_name=''17while last_url!=url:18print('\nThe URL is:',url,'\n')19while ie.ReadyState != 4:20 time.sleep(1)21while ie.Document.readyState != "complete":22 time.sleep(1)23#滑动滚动条24 win=ie.Document.parentWindow25 lastY=-1;26for i in range(40):27 win.scrollTo(0,500*i)28 nowY=win.pageYOffset29if(nowY==lastY):30break31 lastY=nowY32 time.sleep(0.4)33print('Document load state:',ie.Document.readyState)34 doc=ie.Document35#第⼀次需要创建⽬录36if(dir_name==''):37 root_dir='E:\\img'38 dir_name=root_dir+'\\'+doc.title39 dir_name=dir_name.replace('|','-')40if(os.path.exists(root_dir)!=True):41 os.mkdir(root_dir)42if(os.path.exists(dir_name)!=True):43 os.mkdir(dir_name)44 all_image=doc.images45print('共有',all_image.length,'张图⽚')46 count=0;47for img in all_image:48if(img.id=='b_img'):49 count=count+150print(count,img.src)51 time.sleep(1)52 img_file=urllib.request.urlopen(img.src)53 byte=img_file.read()54print(count,'donwload complete!','-'*10,'size:','{:.3}'.format(byte.__len__()/1024),'KB')55if(byte.__len__()>7000):56 file_name=img.src.replace('/','_')57 file_name=file_name.replace(':','_')58 end=file_name.__len__()59if(file_name.rfind('!')!=-1):60 end=file_name.rfind('!')61if(file_name.rfind('?')!=-1):62 end=file_name.rfind('?')64 write_file=open(dir_name+'\\'+file_name,'wb')65 write_file.write(byte)66 write_file.close()67print(count,file_name,'complete!')68#下⼀张69 last_url=url70 win32api.keybd_event(39,0)71 time.sleep(1)72 url=ie.Document.url73print(last_url,url)74#ie.Quit()75if__name__ == '__main__':76 main()2.selenium1# -*- coding: cp936 -*-2import sys3import urllib4import time5import os6from selenium import webdriver7def main():8#获取参数9 url=sys.argv[1]10#操作IE11 driver=webdriver.Chrome()12 driver.get(url)13 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")14#创建⽬录15 dir_name=driver.find_element_by_tag_name('title').text16print dir_name17 root_dir='E:\\img'18 dir_name=root_dir+'\\'+dir_name19 dir_name=dir_name.replace('|','-')20if(os.path.exists(root_dir)!=True):21 os.mkdir(root_dir)22if(os.path.exists(dir_name)!=True):23 os.mkdir(dir_name)24 images=driver.find_elements_by_tag_name('img')25 count=026for image in images:27 count=count+128 image_url=str(image.get_attribute('src'))29 img_file=urllib.urlopen(image_url)30 byte=img_file.read()31print count,'donwload complete!','-'*10,'size:',byte.__len__()/1024,'KB'32if(byte.__len__()>7000):33 file_name=image_url.replace('/','_')34 file_name=file_name.replace(':','_')35 end=file_name.__len__()36if(file_name.rfind('!')!=-1):37 end=file_name.rfind('!')38if(file_name.rfind('?')!=-1):39 end=file_name.rfind('?')40 file_name=file_name[:end]41 write_file=open(dir_name+'\\'+file_name,'wb')42 write_file.write(byte)43 write_file.close()44print count,file_name,'complete!'45 driver.quit()46if__name__ == '__main__':47 main()3.HTMLParser:1# import modules used here -- sys is a very standard one2import sys3import urllib.request4# Gather our code in a main() function5from html.parser import HTMLParser6class MyHTMLParser(HTMLParser):7def handle_starttag(self,tag,attrs):8if(tag=='img'):9for attr in attrs:10if(attr[0]=='src'):11 img_file=urllib.request.urlopen(attr[1])12 byte=img_file.read()13#⽂件⼤于1000b则⽣成⽂件,添加计数,下载多少图⽚,显⽰html代码14if(byte.__len__()>1000):15 file_name=attr[1].replace('/','_')16 file_name=file_name.replace(':','_')18if(file_name.rfind('!')!=-1):19 end=file_name.rfind('!')20if(file_name.rfind('?')!=-1):21 end=file_name.rfind('?')22 file_name=file_name[:end]23## print(file_name)24 write_file=open('E:\\img\\'+file_name,'wb')25 write_file.write(byte)26 write_file.close()27def main():28#获取参数29 url=sys.argv[1]30print('\nThe URL is:',url,'\n')31#读取url所指向的资源32 html_file=urllib.request.urlopen(url)33 byte_content=html_file.read()34#将html⽹页保存起来35 url_file=open('E:\\img\\html\\result.htm','wb')36 url_file.write(byte_content)37 url_file.close()38#从字节转换为字符串39 s=str(byte_content, encoding = "utf-8")40#print(s)41#bytes.decode(html_file.read())42 parser=MyHTMLParser(strict=False)43 parser.feed(s)44# Standard boilerplate to call the main() function to begin 45# the program.46if__name__ == '__main__':47 main()。
用python爬取图片
⽤python爬取图⽚声明:全过程没有任何违法操作背景这周闲的⽆聊,到某个不⽤FQ就能上P站的⽹站上欣赏图⽚,但是光欣赏也不够,我得下载下来慢慢欣赏,于是便写了个爬⾍(批量)下载图⽚(因为在这个⽹站上下载需要⼀张⼀张下载,⿇烦)。
分析下载单张图⽚⾸先打开,然后F12寻找我需要的⽬标⽂件,然后再爬⾍上运⾏⼀下看看状态是什么import requestsurl = 'https://pixiv-image.pwp.link/img-original/img/2018/12/08/03/57/33/72014282_p0.jpg'headers = {'Origin': 'https://pixiviz.pwp.app','Referer': 'https://pixiviz.pwp.app/pic/72014282','Sec-Fetch-Dest': 'empty','User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Mobile Safari/537.36' }response = requests.get(url, headers=headers)print(response)结果显⽰是200,说明可以下载下载可以使⽤如下代码filename = str('图⽚')+".png"with open(filename,"wb") as code:code.write(response.content)print('⽂件下载成功!')如图,图⽚下载成功注意:这个下载的⽂件的请求头必须写完整,否则图⽚是⽆法爬取到的批量下载其实批量下载有多种⽅法,我只讲⼀种,还有⼀种我会在最后说思路在我们所要爬取的⽹页中的作品集⼀共有15张图⽚,于是我们可以尝试吧url中的"p0"中的数字进⾏修改然后再看看效果图⽚会更改,于是我们可以设计⼀个循环来实现图⽚批量爬取,设计如下import requestsimport timei = 0while i < 15:url = 'https://pixiv-image.pwp.link/img-original/img/2018/12/08/03/57/33/72014282_p{}.jpg'.format(i)headers = {'Origin': 'https://pixiviz.pwp.app','Referer': 'https://pixiviz.pwp.app/pic/72014282','Sec-Fetch-Dest': 'empty','User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Mobile Safari/537.36' }response = requests.get(url, headers=headers)filename = str('图⽚{}'.format(i))+".png"with open(filename,"wb") as code:code.write(response.content)print('图⽚{}下载成功!'.format(i))i += 1time.sleep(0.5)这⾥的time.sleep是⽤来减慢爬取速度,防⽌⽹站识别爬⾍⽽禁ip访问上图是第15张图⽚这是我们爬到的第15张图⽚于是这样我们就实现了图⽚的批量爬取批量下载的另种设计思路在这个⽹站(⽹站url我不会给出)上可以进⼊画师主页,然后F12可以寻找到对应的作品集⽂件,然后发送请求返回⽂件中的数据(json⽂件),最后利⽤循环就能设计出批量爬取图⽚的程序了,下⾯我就放⼀张⾃⼰设计的程序运⾏图⽚⾄于本⼈欣赏什么类型的图⽚,⼤伙⼉就不⽤知道了。
Python爬虫文件下载图文教程
Python爬⾍⽂件下载图⽂教程⽽今天我们要说的内容是:如果在⽹页中存在⽂件资源,如:图⽚,电影,⽂档等。
怎样通过Python爬⾍把这些资源下载下来。
1、怎样在⽹上找资源:就是百度图⽚为例,当你如下图在百度图⽚⾥搜索⼀个主题时,会为你跳出⼀⼤堆相关的图⽚。
还有如果你想学英语,找到⼀个⽹站有很多mp3的听⼒资源,这些可能都是你想获取的内容。
现在是⼀个互联⽹的时代,只要你去找,基本上能找到你想要的任何资源。
2、怎样识别⽹页中的资源:以上⾯搜索到的百度图⽚为例。
找到了这么多的内容,当然你可以通过⼿动⼀张张的去保存,但这样做既费⼒⼜费事。
你当然更希望通过程序⾃动去下载所找到的资源。
要想代码识别这些资源,就要告诉代码这些资源有哪些特征,怎样在⽹页中找到它们。
打开浏览器的调试功能(不同浏览器可能有差别,不知道的百度⼀下吧)。
找出⽹页中你想要下载资源的路径,如下图所⽰。
如果有许多类似资源需要下载,则要找到识别这些资源地址的规律,然后告诉代码。
3、资源下载⽅法⼀:代码很简单,直接上代码:from urllib.request import urlretrieveurlretrieve("图⽚URL", "./image.jpg")直接通过urlretrieve函数就把URL对应的图⽚给下载到当前⽂件夹(./)中了,并把图⽚命名为image.jpg。
4、资源下载⽅法⼆:还是直接看代码:import requestsresource = requests.get("图⽚URL")with open("./image.jpg", mode="wb") as fh:fh.write(resource.content)此下载⽅法要安装python的requests库。
从功能上来说与下载⽅法⼀是⼀样的。
python库的安装⽅法⽤pip就好。
简单实现Python爬取网络图片
简单实现Python爬取⽹络图⽚本⽂实例为⼤家分享了Python爬取⽹络图⽚的具体代码,供⼤家参考,具体内容如下代码:import urllibimport urllib.requestimport re#打开⽹页,下载器def open_html ( url):require=urllib.request.Request(url)reponse=urllib.request.urlopen(require)html=reponse.read()return html#下载图⽚def load_image(html):regx='http://[\S]*jpg'pattern=pile(regx)get_image=re.findall(pattern,repr(html))num=1for img in get_image:photo=open_html(img)with open(r'E:\Photo\%s.jpg'%num,'wb') as f:print('开始下载图⽚')f.write(photo)print('正在下载第%s张图⽚'%num)f.close()num=num+1if num>1:print('下载成功')else:print('下载失败')url='/'html=open_html(url)load_image(html)执⾏结果:注意: 在运⾏之前,必须要有路径(⽂件夹):E:\Photo\ 如果⽹站是HTTPS可以将正则中的http换为HTTPS,可以再定义⼀个下载图⽚的函数 如果想要下载jpg、png、gif等多种格式的图⽚可以将正则中的jpg换为对应格式,也可以使⽤元组定义多种格式后遍历我这⾥只要jpg就可以,就不改了,⼤家可以⾃⼰改下。
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
Python使⽤Scrapy爬⾍框架全站爬取图⽚并保存本地的实现代码⼤家可以在Github上clone全部源码。
基本上按照⽂档的流程⾛⼀遍就基本会⽤了。
Step1:在开始爬取之前,必须创建⼀个新的Scrapy项⽬。
进⼊打算存储代码的⽬录中,运⾏下列命令:scrapy startproject CrawlMeiziTu该命令将会创建包含下列内容的 tutorial ⽬录:CrawlMeiziTu/scrapy.cfgCrawlMeiziTu/__init__.pyitems.pypipelines.pysettings.py middlewares.pyspiders/__init__.py...cd CrawlMeiziTuscrapy genspider Meizitu /a/list_1_1.html该命令将会创建包含下列内容的 tutorial ⽬录:CrawlMeiziTu/scrapy.cfgCrawlMeiziTu/ __init__.pyitems.pypipelines.pysettings.py middlewares.pyspiders/ Meizitu.py__init__.py...我们主要编辑的就如下图箭头所⽰:main.py是后来加上的,加了两条命令,from scrapy import cmdlinecmdline.execute("scrapy crawl Meizitu".split())主要为了⽅便运⾏。
Step2:编辑Settings,如下图所⽰BOT_NAME = 'CrawlMeiziTu'SPIDER_MODULES = ['CrawlMeiziTu.spiders']NEWSPIDER_MODULE = 'CrawlMeiziTu.spiders'ITEM_PIPELINES = {'CrawlMeiziTu.pipelines.CrawlmeizituPipeline': 300,}IMAGES_STORE = 'D://pic2'DOWNLOAD_DELAY = 0.3USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'ROBOTSTXT_OBEY = True主要设置USER_AGENT,下载路径,下载延迟时间Step3:编辑Items.Items主要⽤来存取通过Spider程序抓取的信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Python简单爬虫包Helium实现——下载百度图片
作者:头铁的小甘
怎样在网页上自动爬取数据,实行类人类行为操作?Python在爬虫这方面拥有代码简单、操作简单、意义明确。
因此利用Python爬取数据做辅助手段成为各行各业的主流趋势。
在这里你可能会想到urllib3库和requests库等,但对于一名小白来说,不需要详细了解这些内容,又能实行相应的操作,那么最简单就是首选Python的Helium库。
该库操作最接近人行为,同样还有的就是selenium appium。
但Helium库更为简单。
下面就来看看Helium库的简单包内容
主要内容如图所示
1.action:这个就是我们日常浏览网站的操作,比如说:click、write这两个是最
常用的操作,他们的意义分别是单击和在框内输入内容。
(框内输入内容实现搜索内容填写,登录信息填写)。
2.predicates:这个是基本对象,就是上面操作的对象。
Button、Image分别是
按钮和图像,也就是说网页是一些按钮、文本、图片等控件组成。
3. KEY :这个是定义的一些按键,模拟人类键盘操作,需要结合action 中的press 操作使用。
注意:目前这个包只支持谷歌和火狐浏览器,因此在使用前请确认计算机安装了谷歌或者火狐浏览器,而且版本尽量高,太低版本也不支持。
原理不多说,直接上例程
现在我们图片来源大多数来自于百度,那么我在这里就实现一个百度图片的批量下载。
我们选择下载美女孙允珠的图片,这位美女气质非凡,穿着打扮迷人,可以借鉴打扮款式,而且很养眼。
其他内容的图片流程一样,可以模拟编写代码。
主要流程如下
当你搜索百度图片时,上面就是你下载一张图片的行为。
那么计算机可以下载一张图片,怎样大规模下载?从而解放双手
相应的实际操作如下图
上面第一步到第九步为一张图片完整下载和下一张图片开始的人类操作。
Python实现代码
代码很简单而且也很少,对应内容已经给出详细注释
结果:
未完待续。