I.Talk | "盗图"—Python爬虫入门技

「I.Talk」,是从北师珠信院学生会延伸至微信公众号的特别栏目,针对于IT行业一周之内的时事进行报道。我们将每周一为同学们,报道最新鲜最有趣的新闻资讯,让同学们在学习IT知识之余,了解国内外IT行业潮流形势。

愉(duo)快(shou)的双十一过去了,看到购物网站上琳琅满目的商品,配着漂亮的图片,有没有很想下载下来当做素材呢。京东是我们购物经常去光顾的一个平台,它里面的商品多种多样,其中的商品图片也是应有尽有,今天小编呢就给大家带来一个京东商品图片的简单爬虫。

开发工具及环境搭建

多干货分享加python编程语言学习QQ群 515267276

Python版本:3.6.4

开发环境:pycharm 64位

浏览器:Chrome

相关模块:requests、urllib.request、lxml、os、bs4

安装:pip 安装即可

爬取 url 地址:www.jd.com 如下图

现在我们假设要爬取手机的图片,我们在搜索框内输入手机,点击搜索后的页面如下图。

                                        此时的 url 如下图所示

可见其中有 ‘keyword=手机‘ 以及 ‘wq=手机’关键字,说明请求使用的是 get 方法现在我们修改 url,去掉一些字段后如下图所示。

                                             页面可以正常显示

我们来点击第二页,可以看到 url 多了一个‘page=3’的字段,点击第三页,其中的数字变成了5,由此说明它的 url 每一页的字段为单数,我们在删减 url 可正常显示。

                                                                  如下图

所以说,我们可以通过改变关键字,来确定想爬取的商品图片。确定了 url 后,我们来构造 url 列表,小编我只爬取了了前10页,有600张图,你也可以自定义,但太多的话会受到京东的反爬。代码如下,先输入一个 commodity 来得到想要爬取的商品名的关键字;然后用列表解析构造前10页的 urls。

                          我们先定义一个图片下路径供后面使用

构造请求头,在浏览器中按下 F12 打开开发者工具,点击‘Network’,下面会出现一堆文件,点击第一个文件,右面会出现一些信息,选中‘Headers’找到其中的‘user-agent’,这就是请求头,模拟浏览器访问的参数。

                                     模块导入,如下图

多干货分享加python编程语言学习QQ群 515267276

                  

那现在我们可以来写爬取的函数了,如下图

                               现在来解释一下。

传进去的是每一页的 url 和计数器 count,用来记数爬到了第几张图片。

第一二行,请求 url,并用 bs4 库中的 BeautifulSoup() 类来获得 HTML 源码并用 ‘lxml’ 解析。

第三行用 select 选择器获得所有图片在 HTML 源码中的位置组成一个列表,在图片那里右键‘检查元素‘,在右边会弹出高亮代码,在那里在右键‘Copy’-‘select’,就的到了 select 选择器路径。

                                                              !!注意,下面是一个有点坑的问题!!

获得图片的 HTML 源码所在的后,就要下载了,可我运行调式,发现获得的图片 url 的属性与源码中显示的属性不一样,导致没有结果

                                                                       在源码中的显示的属性,如下

图片对应的 url 的为属性为‘src’,经过断点调试发现,爬下来的真实属性为‘source-data-lazy-img’。

                                                              如下图

                                    

!!!要用此属性才能获取图片的 url 去下载!!!

现在开始下载,首先用了,一个异常捕获,防止在下载中有图片不能下载而导致程序停止。

用循环提取列表中的每一个图片的 url ,给图片命名。

用 urllib.request.urlretrieve(img_url,filename=img_name) 下载,第一个参数是图片的 url,第二个是图片的下载路径的名字

                                                                    最后返回计数器

                                                     再来定义一个,创建下载路径的文件夹的函数,这里就不多解释,如下图

                                最后主函数,如下

其中要想调用创建文件夹的函数,创建保存的文件,在开始循环,但在调用爬取函数之前,要先把 url 的编码格式转换一下,否则会有问题。

多干货分享加python编程语言学习QQ群 515267276

                                        最终成果

猜你喜欢

转载自blog.csdn.net/cbyacq798/article/details/84535447