养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

使用selenium和requests,下载mmjpg上所有的图片

时间:2024-10-22 08:20:50

为什么要爬这个网站呢,并不是因为图片怎么样,不是的,我又不喜欢看这种图片,一点意思也没有。

使用selenium和requests,下载mmjpg上所有的图片

工具/原料

python

seleniumphantomJS

requests

方法/步骤

1、首先,分析网页水貔藻疽,网站的URL都很有规律,没个美女的套图是这样http://www.mmjpg.com/mm/1336,从吭稿荔徊1到1336,每张大图的地址是在id为"content"的div标签里面,如图:

使用selenium和requests,下载mmjpg上所有的图片

2、然后爬取的思路就很清晰了,从1到1336,依次获取并打开每一份套图的地址,接着喘揲塾疖点击所有图片的元素链接,加载出所有图片鹚兢尖睁的地址,再根据获得的图片地址写入到本地文件中。这里有个需要注意的地方,当程序不加任何headers直接打开图片地址时,会跳转到同一页面,所以放弃了urllib.request.urlretrieve来下载图片,因为我还没找到怎么在里面加head头信息的方法,跳转的地址如下图:

使用selenium和requests,下载mmjpg上所有的图片

3、这时只要加上head头信息就可以解决了,其中关键值是referer,只要是本地域名下都可以,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。

使用selenium和requests,下载mmjpg上所有的图片

4、代码如下:用了比较简单的代码。

使用selenium和requests,下载mmjpg上所有的图片

代码解读

1、代码首先用requests造了一个用来下载图片的函数,传入下载地址和图片文件名为参数,以备获取到图片地址后直接使用,然后使用selenium依次打开从1到1336份套图,定位“全部图片”元素,进行点击。

使用selenium和requests,下载mmjpg上所有的图片

2、也可以直接用driver.find_element_by_id('opic')来邈赕瑟遂定位,那样会更加简单准确,不过经常练习使用xpath来霁凶咬食定位也是很有益处的,.click()点击元素后,重新打印源码就会加载出所有图片的信息了,如图一所示,接着定位获取标题,加入递增标量后用来当做文件的名称,就不用管每一份套图具体有多少张图片了,继续定位图片链接,并获取href属性,来作为下载函数的参数,在每个套图循环中运行函数完成图片下载。经过一段时间,大概一个多小时吧,图片下载成果如下:

使用selenium和requests,下载mmjpg上所有的图片

© 一点知识