Python requests爬虫 爬取mm131图片

第一次爬取mm131图片的时候,不能将爬取的图片正常下载存储,看了些文章,发现在下载图片时headers必须要有Referer字段,否则下载的图片是错误的,具体原因暂时没懂,也没理解如何测试出需要Referer字段的,做个标记

参考:http://www.mamicode.com/info-detail-2155901.html

import requests
from bs4 import BeautifulSoup
import re
import os
import time

url="http://www.mm131.com/xinggan/"

def get_all():#获取首页所有图片组的信息
    url="http://www.mm131.com/xinggan/"
    headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"}
    html=requests.get(url,headers=headers)
    html.encoding="gbk"
    html=BeautifulSoup(html.text,'lxml')
    all_tpurl=html.select('.list-left > dd > a:nth-of-type(1) ')[:-1]
    #print(all_tpurl)
    for i in all_tpurl:
        tpz_url=i['href']#图片组链接
        name=i.find('img').get('alt')#图片组名字
        #print(tpz_url,name)
        yield (tpz_url,name)
#每组图片中,图片的链接是类似这样:http://img1.mm131.me/pic/3983/1.jpg,每张图片的链接只有结尾数字不同,
#因此只需要获取一组图片中的第一张图片,与组图的总张数即可获取每张图片的链接

def get_tuzu(tz):#获取单独一组图片中每张图片的链接并下载
    time.sleep(1)
    url=tz[0]
    name=tz[1]
    headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0",}
    html=requests.get(url,headers=headers)
    html.encoding="gbk"
    html=BeautifulSoup(html.text,'lxml')
    tz_url=html.select('.content-pic > a > img:nth-of-type(1)')[0].get('src')
    tz_url=re.search(r'(http.*?/)\d+.jpg',tz_url)
    tz_url=tz_url.group(1)
    num=html.select('span.page-ch')[0].get_text()[1:3]#获取图片组的页数
     ####保存到C盘的mt文件夹中,并根据不同图片组命名不同的文件夹###
    os.chdir('c:/')
    c_list=os.listdir('c:/')
    if "mt" in c_list:
        pass
    else:
        os.mkdir('c:/mt')
    os.chdir('c:/mt')
    if name in os.listdir('c:/mt'):
        pass
    else:
        os.mkdir(name)
    os.chdir(name)
     ####保存到C盘的mt文件夹中,并根据不同图片组命名不同的文件夹###
    for i in range(1,int(num)+1):
        tp_listurl=str(tz_url)+'{}.jpg'.format(str(i))
        #print(tp_listurl)
        html=xz(tp_listurl,referer=url)
        time.sleep(1)
        with open(str(i)+'.jpg','wb') as f:#下载
            f.write(html.content)
        
        #yield tp_listurl
    #yield url

    
def xz(url,referer):#获取单独一张图片的信息
    #要下载图片,headers必须添加【Referer】
    #根据测试Referer的可以是要下载图片本身的链接,也可以是要下载图片的组的链接,也可以是要下载图片的上一张图片的链接
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0','Referer':referer}
    html=requests.get(url,headers=headers)
    return html
 
if __name__=="__main__":
    for tz in get_all():
        get_tuzu(tz)
        
   


已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页