麦克引擎 SCRAPY 下载百度图片踩坑记

原创 2018年04月17日 10:56:11

忙了一上午各种采坑,才把百度图片保存下来。搞得我一肚子火,写出来让大家少踩点坑。

为了我的麦克引擎,我决定去百度上把所有的狗狗照片重新收集一遍。

其实之前kaggle提供了很多的照片,但是这些照片……


问题1:无关人员太多。问题2:狗狗的图片数量太少。问题3:没有足够多的种类。

总之,我决定了,重新自己收集图片,自己整理学习数据集合。这就像教孩子学习,想要教好他,就要给他足够好的知识,显然我不想让他认识画面中那些人,只想让他认识狗,所谓狗不如人,跑题了。

1.目标 把百度上的图片存下来


做这种事儿,那肯定是scrapy啊。

上scrapy大法,正好之前写过一个爬取头条数据的。什么?ajax渲染,反爬取?不存在的,上selenium+chrome,直接开一个浏览器读取html并渲染,然后抓取渲染完成的body分析。

把之前的代码整理了一下跑起来。


很快数据出来,我当时很乐观,我认为这点事儿,肯定10分钟搞定了。然后我开始了我的踩坑之旅。

踩坑1.scrapy的下载中间件

class jsPageMiddleware(object):
    stime = 2
    downtime = 1
    def process_request(self, request, spider):
        chromedriver = "C:/Users/mayn/AppData/Local/Google/Chrome/Application/chromedriver.exe"
        browser = webdriver.Chrome(chromedriver)
        browser.get(request.url)
        browser.refresh()
        #browser.send_keys(Keys.DOWN)
        #通过按向下键将页面滚动条拖到底部  
        for i in range(self.downtime):
            #browser.find_element_by_xpath("//*[@id='wrapper_wrapper']").send_keys(Keys.DOWN)
            ActionChains(browser).send_keys(Keys.PAGE_DOWN).perform()
            time.sleep(1) 
       
        time.sleep(self.stime)
        body = browser.page_source
        return HtmlResponse(browser.current_url, body=body, encoding='utf-8', request=request)

为了躲避所谓的js渲染问题,我用了selenium来加载页面,然后构建新的response返回。

可是这玩意是挡在任何请求前面的,也就是说其实我是希望只在spider时用这个中间件,真正下载时不打开这个浏览器。

结果下载图片是开了n个窗口,每个窗口还是430 forbidden。

这个难受啊。

决定去研究一下 spider middle


先看的一个scrapy中文文档,结果对于这句话死活不明白,到底是调用之前还是之后?


只好去翻英文,终于明白是在调用spider的parse方法前调用该方法。

什么?只能返回None或者exception。我tnnd就是想改变response好让spider能分析js渲染过的html,你tnnd不让我更改response,要你何用?算了不让返回response,我更改传递进来的response吧。我是不想改变response,你tnnd倒是提供一个解决js渲染的方案啊,我自己想方案你又说不能这样用…

我很天真的写了一行:

response.body = body

很自然的,报错了,我去查了查,原来scrapy爸爸是这样教我做人的:

我很天真的用了replace,果然不行。


然后看到baba说了一句话,感情你是创建了一个新对象。我要的是改变一下里面的值。(可能我水平太凹)总之这条路我放弃了。

我不写Spider中间件了还不行!?

我重新回去看看下载中间件吧。

灵光一现,发现请求jpg就不处理呗。


判断后缀,如果是jpg不处理。

采坑2.430 forbidden

图片在浏览器中看起来都ok,一用才发现满屏的430 forbidden,百度爸爸教做人啊。

又研究了半小时,原来就是


headers必须增加两个东西。


老年人的手速和学习能力,加上各种坑,坑的我快吐血了,本来我就是想下载一个图片而已,结果一上午愉快的过去了。


这就是结果,一堆图片,而且还有很多不是affenpinscher的,哎。

这种感觉就像是本来就是想1分钟过河,结果花了一年的时间建了一座桥。过了河,发现好像来错地方了……

我想呐喊,想骂人,最后冷静下来还是写了一篇博文……

微信小程序踩坑总结

微信小程序踩坑总结一、样式 1.微信官方提供的rpx单位在横向可以很好的实现响应式,但在纵向方面表现不理想,各个设备的兼容情况并不好,因此纵向我依然选择用px为基本单位进行开发。 ...
  • AiceIce
  • AiceIce
  • 2017-07-17 12:31:55
  • 278

spring boot 踩坑日记

最近想开发一个后台业务框架,考虑到原先冗余复杂的spring各项配置,遂采用了spring boot 这种零配置方案。首先介绍下工具:Intelij Idea 2017,git,jdk1.8,mave...
  • calegequ
  • calegequ
  • 2018-01-24 01:00:58
  • 61

python踩过的一些坑

找完工作,又开始忙于做毕设,很久没更新博客了,不过博客新上线的这个新界面太不好用了,分类下只有两篇文章,每次点击进去都出现很多篇其他类的,每次找一篇博文都要翻很久。体验真是极差。 废话不多说...
  • xiaoquantouer
  • xiaoquantouer
  • 2017-12-06 16:33:23
  • 201

百度ueditor踩坑,ueditor图片上传

最近开发了一个网站,后台编辑文章使用了富文本编辑器kindeditor,在使用过程重碰到选择微软雅黑字体时候生成html语言标记有问题。把引号转义成&quote,(这个问题在非chrome浏览器没问题...
  • learner198461
  • learner198461
  • 2016-12-14 20:00:37
  • 562

Scrapy爬取百度图片(一)

Scrapy爬百度图片(一)本人小白一个,最近初学scrapy,所以边学边记录咯!Scrapy入门 关于这部分我不能提供更多帮助哈哈哈!参考http://scrapy-chs.readthedocs...
  • qq_23228315
  • qq_23228315
  • 2017-05-23 22:07:38
  • 1164

边学边记(3):scrapy爬取gif图片

边学边记,记录遇到的坑达成的小目标 。前篇爬取的是静态的图片这次是针对gif。其实无论静态动态用如下的方式都可以爬取。代码如下:(多玩写错了变成douwan)items:import scrapy ...
  • DDCooper
  • DDCooper
  • 2018-02-01 13:56:48
  • 200

scrapy爬取百度图片,解决ajax+json的异步问题

首先,我用爬虫的目的是为了学习图像处理,为制作自己的图像数据集,去训练分类器所用,所以这是一项基本技能吧,话不多说,下面就是我用scrapy框架去爬取百度图片的分类器1.明确要爬取的对象是什么(1)找...
  • qq_25109263
  • qq_25109263
  • 2018-03-05 14:27:51
  • 55

Scrapy爬取百度图片(二)

创建项目scrapy startproject 在命令行输入以上命令就可以创建一个scrapy项目,然后进入你的项目根目录,找到items.py然后我们来定义一些item对象。定义item#items...
  • qq_23228315
  • qq_23228315
  • 2017-05-24 16:20:46
  • 369

踩坑:图片拍照上传等

以前这个功能也做过,无奈这次碰上的坑特别多,特此记录。为啥拍照后总resultCode总是0?检查了许久,发现,存储的位置不在sdcard,所以拍照后的resultCode总是0。以前没有关注过,以后...
  • yu_duan_hun
  • yu_duan_hun
  • 2017-09-21 08:58:14
  • 193

致Android-那些年,我们一起踩过的坑

大爷的,从搞android至今,踩过的坑倒是不少,MD,要是同一个坑,踩一次也就算了,踩两次、多次那就显得狠low了…记录那些年,希望跟我踩同一个坑的同胞们一些帮助(主要是怕自己踩同一个坑,哈哈~~)...
  • yiluyoufeng
  • yiluyoufeng
  • 2016-06-18 23:29:23
  • 832
收藏助手
不良信息举报
您举报文章:麦克引擎 SCRAPY 下载百度图片踩坑记
举报原因:
原因补充:

(最多只允许输入30个字)