精华内容
下载资源
问答
  • 描述:用Python爬去百度贴吧图片并保存到本地。本人刚学爬虫还不是很熟练,其中难点在于正则表达式的理解;说明1获取整个页面数据Urllib 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp...

    描述:用Python爬去百度贴吧图片并保存到本地。

    本人刚学爬虫还不是很熟练,其中难点在于正则表达式的理解;

    说明

    1

    获取整个页面数据

    Urllib 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp上的数据。首先,我们定义了一个getHtml()函数:

    urllib.urlopen()方法用于打开一个URL地址。

    read()方法用于读取URL上的数据,向getHtml()函数传递一个网址,并把整个页面下载下来。执行程序就会把整个网页打印输出。

    2

    筛选页面中想要的数据

    我们又创建了getImg()函数,用于在获取的整个页面中筛选需要的图片连接。re模块主要包含了正则表达式:

    re.compile() 可以把正则表达式编译成一个正则表达式对象.

    re.findall() 方法读取html 中包含 imgre(正则表达式)的数据。

    运行脚本将得到整个页面中包含图片的URL地址。

    3

    将页面筛选的数据保存到本地

    通过一个for循环对获取的图片连接进行遍历,为了使图片的文件名看上去更规范,对其进行重命名,命名规则通过x变量加1。保存的位置默认为程序的存放目录。

    程序运行完成,将在目录下看到下载到本地的文件。

    作者:MTbaby

    来源:http://blog.csdn.net/mtbaby/article/details/70209729

    *声明:推送内容及图片来源于网络,部分内容会有所改动,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

    - END -

    展开全文
  • Python动态爬取百度图片 爬取思路 主要通过selenium模拟人为一步步操作浏览器 功能结果展示 根据输入要求,爬取百度图片,并返回结果 根据输入关键字创建对应文件夹 如下图为相同关键字下,百度图片和爬取后...

    Python动态爬取百度图片

    爬取思路
    主要通过selenium模拟人为一步步操作浏览器
    功能结果展示

    1. 根据输入要求,爬取百度图片,并返回结果
      在这里插入图片描述

    2. 根据输入关键字创建对应文件夹
      在这里插入图片描述

    3. 如下图为相同关键字下,百度图片和爬取后保存的图片对比。(爬取中有一张相同图片,原因事代码设置等待时间太长,下载重复,可调节)
      百度图片
      下载并保存到本地文件夹:
      爬取下载的图片
      代码解释

    4. 下面为程序需要的模块

    from  selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys
    import time
    import requests
    import os
    import re
    
    1. 创建一个浏览器启动对象
    b=webdriver.Chrome()
    
    1. 获取网页元素的位置
      在浏览器页面按f12进入开发者页面
      在这里插入图片描述
      第一步模拟人为点击搜索框。通过find_element_by_id()方法,以ID找到该input,然后send_keys()模拟键盘输入
    search_box=b.find_element_by_id('kw')#通过id获取百度图片搜索框
    search_box.send_keys(name)          
    search_box.send_keys(Keys.ENTER)    #Keys.ENTER输入回车
    
    1. 选择尺寸
      我们可以选择一个尺寸,同理找到全部尺寸的代码位置,模拟鼠标在上面,得到下拉列表。然后我们通过find_element_by_xpath()来找到特大尺寸的位置。(在右边html里找到特大尺寸位置,右击鼠标,copy>copy XPath,即复制到了,粘贴进方法即可,如下面的代码)

    在这里插入图片描述

    	ele=b.find_element_by_id('sizeFilter')		#ele获取到了尺寸选择块
        ActionChains(b).move_to_element(ele).perform()	#移动鼠标到ele块上并悬停perform()>>>得到下拉框
        time.sleep(1)
        ele_bigsize=b.find_element_by_xpath('//*[@id="sizeFilter"]/div/div[1]')#传入最大尺寸选项的位置
        ActionChains(b).move_to_element(ele_bigsize).perform()	#点击最大尺寸选项
        ele_bigsize.click()
    
    
    1. 进入第一张图片
      此处进入第一张图片后,浏览器会打开新网页,所以b.switch_to.window(b.window_handles[1])确保当前操作页在新页
      在这里插入图片描述
    ##打开第一张
        ele_first=b.find_element_by_xpath('//*[@id="imgid"]/div/ul/li[1]/div/a/img')#找到第一张图片最大尺寸的位置
        ele_first.click()#点击进入最大尺寸界面
        b.switch_to.window(b.window_handles[1])#因为打开了新页面所以需要切换页面
        x=1
    
    1. 保存图片到文件
        for item in range(1,num+1):
            ele_down=b.find_element_by_xpath('//*[@id="currentImg"]')	#获取图片所在的位置
            img=ele_down.get_attribute('src')	#获取路径下图片的src属性
            r=requests.get(img)
            if r.status_code==200:
                path=cb+'/%d.jpg'%x
                print('正在爬取'+img)
                with open(path,'wb') as f:
                    f.write(r.content)
                    time.sleep(1)
                    print('爬取成功')
                    x=x+1
                ele_next=b.find_element_by_xpath('//*[@id="container"]/span[2]/span')
                ele_next.click()
            else:
                ele_next = b.find_element_by_xpath('//*[@id="container"]/span[2]/span')
                ele_next.click()
                time.sleep(1)
                continue
    

    源码
    注释很全,可慢慢体会

    '''
    动态爬取百度图片
    主要根据模拟浏览器人为操作
    '''
    from  selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys
    import time
    import requests
    import os
    import re
    
    def getNamepage(name):
        b.get('https://image.baidu.com/')
        search_box=b.find_element_by_id('kw')#通过id获取百度图片搜索框
        search_box.send_keys(name)          #向里面输入值
        search_box.send_keys(Keys.ENTER)    #Keys.ENTER输入回车
        time.sleep(1)
    
    def downLoad(img_list,num):
        ele=b.find_element_by_id('sizeFilter')#ele获取到了尺寸选择块
        ActionChains(b).move_to_element(ele).perform()#移动鼠标到ele块上并悬停perform()>>>得到下拉框
        time.sleep(1)
        ele_bigsize=b.find_element_by_xpath('//*[@id="sizeFilter"]/div/div[1]')#传入最大尺寸选项的位置
        ActionChains(b).move_to_element(ele_bigsize).perform()#点击最大尺寸选项
        ele_bigsize.click()
    
        ##打开第一张
        ele_first=b.find_element_by_xpath('//*[@id="imgid"]/div/ul/li[1]/div/a/img')#找到第一张图片最大尺寸的位置
        ele_first.click()#点击进入最大尺寸界面
        b.switch_to.window(b.window_handles[1])#因为打开了新页面所以需要切换页面
        x=1
        for item in range(1,num+1):
            ele_down=b.find_element_by_xpath('//*[@id="currentImg"]')#获取图片所在的位置
            img=ele_down.get_attribute('src')#获取路径下图片的src属性
            r=requests.get(img)
            if r.status_code==200:
                path=cb+'/%d.jpg'%x
                print('正在爬取'+img)
                with open(path,'wb') as f:
                    f.write(r.content)
                    time.sleep(1)
                    print('爬取成功')
                    x=x+1
                ele_next=b.find_element_by_xpath('//*[@id="container"]/span[2]/span')
                ele_next.click()
            else:
                ele_next = b.find_element_by_xpath('//*[@id="container"]/span[2]/span')
                ele_next.click()
                time.sleep(1)
                continue
    
    if __name__ == '__main__':
        name = input('请输入要下载的图片:')
        b=webdriver.Chrome()
        imgoutpath='E://PythonDown//'	#保存路径
        cb=imgoutpath+name
        #创建文件夹(不重名就直接创建,重名就以输入的关键字+x创建)
        x = 0
        while x < 5:
            if os.path.exists(cb):
                # cb = cb + str(x)
                cb = re.sub(r'\d+', '', cb) + str(x)  # 用正则方法删除数字
                x += 1
            else:
                os.mkdir(cb)
                break
        num=10		#一次爬取的图片个数
        img_list=[]
        getNamepage(name)
        downLoad(img_list,num)
        b.quit()
    
    
    
    展开全文
  • Python爬取百度图片

    万次阅读 多人点赞 2017-06-16 08:59:18
    新人上路, 老司机们请多多关照, 写的不好的地方, 还请多指教. ...输入想要抓取的图片的关键字, 如”苍老师”, 然后输出百度图片搜索苍老师的所有图片 采用翻页模式进行爬取 1. 分析网页

    新人上路, 老司机们请多多关照, 写的不好的地方, 还请多指教.
    这里写图片描述

    在很久很久以前, 我是一个苦逼的90后挨踢空穴老人, 一个人的夜里可是什么事都能干得出来! 这不, 我用我的程序把美女图片给抓了过来…

    言归正传, 本文介绍如何爬百度图片(滑稽.jpg):

    • 输入想要抓取的图片的关键字, 如"猫"、“美女"等, 然后输出百度图片搜索"猫”、"美女"的所有图片
    • 采用翻页模式进行爬取

    1. 分析网页结构

    http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1497491098685_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ctd=1497491098685%5E00_1519X735&word=“keyword”

    精简一下该网址,其实就是↓
    https://image.baidu.com/search/flip?tn=baiduimage&word=“keyword”
    在浏览器中访问上述网址, 得到如下页面:

    keyword=keyword

    可以看到, 图片是以翻页的形式展现的. 其次, 搜索词"keyword"即为网址最后的word的值. 所以, 如果你想搜什么, 就把"word=“后面的keyword改成对应的词即可, 如"猫”

    在这里插入图片描述
    然后看看这个网址是不是和我们之前设想的一样(即keyword=猫).
    复制过来一看
    http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1582615702295_R&pv=&ic=0&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=0&height=0&face=0&istype=2&ie=utf-8&ctd=1582615702296%5E00_1665X948&sid=&word=%E7%8C%AB

    感觉不对劲, 我要的是"猫", "%E7%8C%AB"是什么鬼?!

    ????

    原来, 还需要一顿操作:

    >>>from urllib.parse import quote
    >>>keyword="猫"
    >>>keyword=quote(keyword)
    >>>keyword
    '%E7%8C%AB'
    

    现在, 就可以拼接网页了: ....(一大堆) + keyword="你想搜索的关键词"

    2. 获取当前页的所有图片的链接

    右键查看网页源代码之后, 发现:
    这里写图片描述

    图片的网址都是这样的格式: "objURL":"网址", 那就好办了, 直接用正则表达式就能解决

    import re
    pattern_pic = '"objURL":"(.*?)",'
    # 这里的html就是网页的源代码的内容, 此处不介绍, 稍后给出
    pic_list = re.findall(pattern_pic, html, re.S)  # 存储当前页的所有图片的url的列表
    

    3. 获取当前页的下一页的链接

    下一页的链接同理根据正则得出:

    pattern_fanye = '<a href="(.*)" class="n">下一页</a>'
    fanye_url = re.findall(pattern_fanye, html)[0]  # 下一页的链接
    

    4. 获取所有页的图片的链接

    上面已经根据当前页的url得到了当前页的所有图片的链接, 以及下一页的url.
    如此, 循环下去, 即可得到每一页的所有图片的链接.

    all_pic_list = []  # 存储所有翻页的所有图片的链接的列表
    while 1:
    	all_pic_list.extend(pic_list)
    	if 循环完所有翻页:
    		break
    

    5.下载图片

    已知了图片链接, 直接下载即可

    for i, pic_url in enumerate(all_pic_list):
    	pic = requests.get(pic_url)
    	string = './images/' + str(i + 1) + '.jpg'
    	with open(string, 'wb') as f:
    		f.write(pic.content)
    

    6.源代码

    👉 https://github.com/xiligey/baidu_photo_spider

    展开全文
  • Python爬取百度贴吧图片 Python2.7.15 当我们需要从网页上大量下载东西时,Python是我们很好的帮手,这次我们以爬取壁纸吧的壁纸图片为例。 一.获取网址 首先从壁纸吧中选一个你喜欢的帖子打开,复制它的网址 ...

    Python爬取百度贴吧图片

    Python2.7.15
    当我们需要从网页上大量下载东西时,Python是我们很好的帮手,这次我们以爬取壁纸吧的壁纸图片为例。

    一.获取网址

    首先从壁纸吧中选一个你喜欢的帖子打开,复制它的网址在这里插入图片描述

    二.获取它的HTML源码

    首先,我们要引入对应模块

    import re
    import urllib
    import sys
    reload(sys)
    sys.setdefaultencoding('utf8')
    
    

    re是正则表达式模块,用来匹配图片地址。
    urllib模块用来获取HTML源码。
    重新加载sys模块将编码设置为utf8,python在安装时,默认的编码是ascii。

    然后用urllib模块的函数来获取源码。

    def getHtml(url):
        page = urllib.urlopen(url)
        html = page.read()
        return html
    

    运行一下,返回该网页的源码
    在这里插入图片描述

    三、用正则匹配源码中图片地址并下载

    从源码中我们可以看到壁纸图片的格式是统一的
    在这里插入图片描述
    在这里插入图片描述
    都是以src=开头,以jpg结尾,由此设置正则,并进行匹配

        reg = r'src="(https://imgsa.baidu.com/forum/w%3D580/sign=.*?\.jpg)"'
        imgre = re.compile(reg)
        imList = re.findall(reg, html)
    
    

    其中,()表示 我们只取括号中的内容,不要之外的; ‘\ .’ 是 ‘.’的 转义

        for i in imList:
            #print(i)
            print x
            urllib.urlretrieve(i, '%s.jpg' % x)
            x += 1
        return x
    
    

    使用for循环遍历匹配到你内容并放入i中,以x命名,并以jpg格式存储
    这里返回x是为下一页的循环准备,以便每一页能接上

    这里说一下页数问题
    贴吧帖子一般都很长,会有好几十页,我们在爬取的时候如何翻页呢?这就要看它的格式了,比如这次的壁纸帖子,就是在原地址后加了个pn=,这样我们可以用for循环来翻页
    在这里插入图片描述

    for k in range(1,89):
        ul = url+ str(k)
        print ul
        html = getHtml(ul)
        print html
    
    

    四.完整代码与结果

    import re
    import urllib
    import sys
    reload(sys)
    sys.setdefaultencoding('utf8')
    
    def getHtml(url):
        page = urllib.urlopen(url)
        html = page.read()
        return html
    
    def getImg(html, x):
        reg = r'src="(https://imgsa.baidu.com/forum/w%3D580/sign=.*?\.jpg)"'
        imList = re.findall(reg, html)
        for i in imList:
            print x
            urllib.urlretrieve(i, '%s.jpg' % x)
            x += 1
        return x
    
    x = 1
    url = "https://tieba.baidu.com/p/4364768066?pn="
    for k in range(1,89):
        ul = url+ str(k)
        print ul
        html = getHtml(ul)
        x = getImg(html, x)
    
    

    在这里插入图片描述
    实在太多爬到八百多我就停了

    展开全文
  • 本例是爬取百度贴吧杰森斯坦森的图片。 打开百度贴吧,输入杰森斯坦森,点开某一个标题后右击鼠标审查元素,查找所要匹配的字符,如下所示: 这里任何一个<img class……>都对应网页上相应的图片,找到你想...
  • (1)初学Python-只需4步,爬取网站图片https://www.jianshu.com/p/11454866bc15[START]第一步:获取网页的源代码urllib.request.urlopen().read()这个方法是获取到请求的这个URL所返回的网页源代码信息数据,返回值...
  • 本文分享的是如何用python爬取百度贴吧的图片和基本信息,虽然知识点不算很难,当作为自己的笔记整理之余还可以分享给我们这些热爱学习的人,我觉得我很愿意,同时也希望各位大佬指点出错误或更好的方法,时刻保持...
  • 原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了?浏览器请求数据方式:浏览器向服务器的api(例如这样的字符...
  • python爬取百度图片

    千次阅读 2018-09-02 09:44:22
    我学习了一些基础知识便尝试写了一个爬虫,爬取百度图片,在这里分享一下我的代码。 想要爬取网络上的东西首先要了解网页结构,我们使用百度图片搜索“美女”,我们会发现网页是这样子的: 直接查看网页源代码,...
  • python爬取百度贴吧的图片,不想一个一个右键另存为的可以试一试了!
  • # python 3.6.3 import re import os from urllib import parse from urllib import request ################################################### # 搜索关键字 下载数量 存放路径 word = '美女' num = 10 path = ...
  • 直接从百度图片上输入关键字搜素的结果, 其实是不带翻页的,应该是用ajax进行刷新加载图片的, 这点本人也还没弄明白,有懂的大神们,还望在评论区指点一二,在下不甚感激了! import requests, re, getpass, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,796
精华内容 2,318
关键字:

python爬取百度网页图片

python 订阅