python:使用requests,bs4爬取mmjpg上的图片
2017-11-18 21:31
246 查看
这是我的第一个爬虫,选择爬这个网站是因为,他URL特别有规律,不是因为他的图片,不是因为图片,不是。。。
首先他每套图的第一张地址如下
http://www.mmjpg.com/mm/1
图片的地址如下
http://img.mmjpg.com/2015/1/1.jpg
图片的地址的URL里面有年份,因为不知道那些图片是哪一年发的,所以不方便把所有的图片都爬下来
因此我从套图的地址中找到第一张图片的图片地址
然后将图片名每次加一,直到最后一张(可以从套图的地址中找到一共有多少张)
根据图片的URL下载图片
在爬的过程中遇到的问题:
1、被ban:更改header的User-Agent,伪装成浏览器浏览,如果还被ban可以使用代理,这个网站只需要伪装头再加上time.sleep()就可以解决了(我导入了fake_useragent,也可以自己造个轮子,我比较懒,直接用了别人的轮子)
2、下载下来的图片是同一张,全是防盗链图片这个问题我也找了好久,结果发现只要在头里加上’Referer’就可以了
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。——百度百科
全部代码:https://github.com/YoungChild/mmjpg_python
首先他每套图的第一张地址如下
http://www.mmjpg.com/mm/1
图片的地址如下
http://img.mmjpg.com/2015/1/1.jpg
图片的地址的URL里面有年份,因为不知道那些图片是哪一年发的,所以不方便把所有的图片都爬下来
因此我从套图的地址中找到第一张图片的图片地址
然后将图片名每次加一,直到最后一张(可以从套图的地址中找到一共有多少张)
# 得到一共有多少张图 def get_img_sum_num(self, img_url): fa = fake_useragent.UserAgent() headers = {'User-Agent': fa.random, 'Referer': 'http://www.mmjpg.com'} request = requests.get(img_url, headers=headers) soup = bs4.BeautifulSoup(request.content, 'lxml') # 获取标签里面的值 img_sum_number = soup.find_all('a', href=re.compile('/mm'))[8].get_text().strip() print img_sum_number img_sum_number = int(img_sum_number) # print img_sum_number return img_sum_number # 得到该套图中的所有图片的URL def get_img_urls(self, url): fa = fake_useragent.UserAgent() headers = {'User-Agent': fa.random, 'Referer': 'http://m.mmjpg.com'} request = requests.get(url, headers=headers) soup = bs4.BeautifulSoup(request.content, 'lxml') first_img_url = soup.find('img').get('src') # 获取标签值 url_split = first_img_url.split('/') img_urls = [] for i in xrange(1, self.get_img_sum_num(url)+1): url_split[-1] = (str(i)+'.jpg') img_urls.append('/'.join(url_split)) # print img_urls return img_urls
根据图片的URL下载图片
def down_pictures(self, img_urls): img_name = str(img_urls[0].split('/')[-2])+'-'+str(img_urls[0].split('/')[-3]) if os.path.exists(img_name): # 查重 如果这个文件夹存在则跳过 防止重复下载 time.sleep(1) print img_name+'存在' return os.mkdir(img_name) for img_url in img_urls: fa = fake_useragent.UserAgent() headers = {'User-Agent': fa.random, 'Referer': 'http://m.mmjpg.com'} request = requests.get(img_url, headers=headers) with open(img_name + u'/' + img_url.split('/')[-1], 'wb') as f: f.write(request.content) # contents返回的为二进制 text返回的为union类型 f.close() print "已保存" + img_name + '/' + img_url.split('/')[-1] time.sleep(random.random()*2)
在爬的过程中遇到的问题:
1、被ban:更改header的User-Agent,伪装成浏览器浏览,如果还被ban可以使用代理,这个网站只需要伪装头再加上time.sleep()就可以解决了(我导入了fake_useragent,也可以自己造个轮子,我比较懒,直接用了别人的轮子)
2、下载下来的图片是同一张,全是防盗链图片这个问题我也找了好久,结果发现只要在头里加上’Referer’就可以了
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。——百度百科
全部代码:https://github.com/YoungChild/mmjpg_python
相关文章推荐
- python:使用requests,bs4爬取西刺代理并验证
- 使用python查询某目录下所有‘jpg’结尾的图片文件
- Python上传磁盘和网络图片,内存图片,使用requests
- python3使用Image库由rgb值生成jpg图片
- 【Python爬虫系列】使用requests爬取图片
- python使用PythonMagick将jpg图片转换成ico图片的方法
- Python---对html文件内容进行搜索取出特定URL地址字符串,保存成列表,并使用每个url下载图片,并保存到硬盘上,使用bs4,beautifulsoup模块
- Python使用requests模块下载图片
- Python下使用qrcode模块生成vCard电子名片二维码图片
- vc6.0使用gdi+在内存中绘图并将其保存为bmp,jpg,gif,png等格式的图片
- 在VC中使用CImage转换图片格式,显示jpg等格式图片
- 在python中可以使用urllib方便的实现图片和flash下载
- 使用PS保存PDF为图片(JPG)
- Python将jpg图片存储成progressive报错
- 在WIN7-64下使用PYTHON获得摄像头图片
- 使用Python编写客户端 上传文字or图片至新浪微博 by OAuth 2.0
- 使用python处理没有被Web用到的图片
- VC6.0中使用Stream Object读取数据中流文件并显示Bmp,JPG等图片
- JPG图片的使用
- 使用Python将文本转为图片