python爬虫之爬取百度图片

#
#author:wuhao
#
#爬取指定页码的图片,如果需要爬取某一类的所有图片,整体框架不变,但需要另作分析
#

可能写的有点乱,因为这是我py写的第一个爬虫程序
思路理一下:适用于所有爬虫,高级点的无非就是在我 以下所说的上面增加了点功能 ,比如代理 、 多线程、 死亡重连 等
思路:
本质上来讲爬虫就是 获取网页 然后解析网页 获取出自己需要的数据 然后对数据进行保存
1.需要解决的就是找到存储 你所需资源的网页 url 【满足一定规律】,因为你不可能没爬去一张网页 手动输一次。
2.找到了url, 你所需要做的就是 以 get | 或 post 的方式获取网页资源,至于 get | post 怎么用,如果你不用框架的话【我建议不要用,因为框架也都是基于 urllib 实现的】,我推荐你去官网上看一下 urllib urllib2 模块,里面的API有详细的使用说明。
3.如果第二步搞定了,说明你已经能够获取网页资源了,那么你所需要的就是解析出资源了。 我一般是用 beautifulsoup 库 和 regex 搭配使用 , beautifulsoup 是需要额外安装的,他功能很强大,可以很快速的解析网页结构。
4.第三步解决的话,你要做的就是存储数据了,因为你爬数据,爬数据,如果不保存也没什么用。





import urllib.request
import urllib.parse
import re
import os
#添加header,其中Referer是必须的,否则会返回403错误,User-Agent是必须的,这样才可以伪装成浏览器进行访问
header=\
{
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
     "referer":"https://image.baidu.com"
    }

 

#由于百度图片获取的方式是采用ajax,所以你从正常的url链接只能提取到一个页面显示的图片,也就是前30张(还是前60张)
#具体的分析是:你下拉页面滚动条,分析XHR的变化,就可以找到所需要的Json数据,比如说这个就是分析后找的Json数据
https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%BE%AE%E8%B7%9D%E6%91%84%E5%BD%B1&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&word=%E5%BE%AE%E8%B7%9D%E6%91%84%E5%BD%B1&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&pn=240&rn=30&gsm=b4&1492507141415=

#而这个链接中的的 rn 参数指的是一页包含的图片数量,最多60。 pn 指得是第多少张 word 指的是搜索的关键字,其它的一些参数是无关紧要的, 当然你需要把其转码
"https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord={word}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&word={word}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&cg=girl&pn={pageNum}&rn=30&gsm=1e00000000001e&1490169411926="

#keyword=input("请输入搜索关键字:")
keyword='美女'

#转换编码格式
keyword=urllib.parse.quote(keyword,"utf-8")

#n作为一个flag,用于条件判断
n=0
#j作为写入图片的识别标志,默认从第0张开始,每写入一张j就+1
j=0
#
error=0


#获取前3000张图片
while(n<30*100):
n+=30
    #url链接
    url1=url.format(word=keyword,pageNum=str(n))

    #获取请求
    rep=urllib.request.Request(url1,headers=header)
    #打开网页
    rep=urllib.request.urlopen(rep)
    #读取网页数据
    try:
        html=rep.read().decode("utf-8")
    except:
        print("something wrong!")
        error=1
        print("-------------now page ="+str(n))
    if(error==1): continue
#正则匹配,你需要的资源都是在 像这样的里面("thumbURL":"https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3734503404,179583637&fm=23&gp=0.jpg") p=re.compile("thumbURL.*?\.jpg")
   #获取正则匹配结果,返回的是一个list s=p.findall(html) #如果不路径存在,创建路径,最后的图片保存在此路径下 if os.path.isdir("f:\\myproject\\MyCrawlPic\\美女")!=True: os.makedirs(r"f:\\myproject\\MyCrawlPic\\美女") with open("testPic1.txt","w") as f: for i in s:
       #获取图片的url i=i.replace("thumbURL\":\"","")
       #在IDE上显示,打印的结果 print(i)
       #保存图片的URL链接,当然你大可不必多此一举 f.write(i) f.write("\n")
       #进行写入图片 urllib.request.urlretrieve(i,"f:\\myproject\\MyCrawlPic\\美女\\pic{num}.jpg".format(num=j)) j+=1                                                                                                                                                                              

  

                                                    






转载于:https://www.cnblogs.com/one-lightyear/p/python_crawl_image_baidu.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python爬虫可以用来自动爬取百度图片,实现批量下载图片的功能。通过使用Python编程语言和相关的库函数,我们可以编写爬虫脚本来完成这个任务。 Python爬虫领域非常常用,因为它有着丰富的库函数和强大的功能,特别是在人工智能和图像处理方面有着突出的表现。 在爬取百度图片时,我们需要注意到百度图片的翻页方式是瀑布流,通过滚动滑轮触发JS进行异步加载,而不是之前的点击下一页的方式。这给爬虫增加了一定的难度。但是通过之前的文章,我们可以找到一篇描述了爬取百度图片的方法,其中介绍的方式可能还是之前的点击下一页的方式。 因此,如果你对爬虫有兴趣,可以尝试使用Python编写一个爬取百度图片的脚本,通过学习和实践,你可以更深入地了解爬虫的知识和应用。同时,你也可以不定期关注爬虫实例和教程,以获得更多的学习和交流的机会。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python 爬虫(1)--爬取百度图片,你确定不来看一看](https://blog.csdn.net/weixin_46897073/article/details/111827736)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值