爬虫初学2

采用requests和parsel爬取美女图片

#parsel 主要用来将请求后的字符串格式解析成re,xpath,css进行内容的匹配    本代码采用xpath
#爬虫初学2 "设置请求头" "运用parsel"进行爬取美女图片
import requests
import parsel
for page in range(1,6): #打印多页,添加的第一行
    print('================正在抓取第{}页数据===================='.format(page))    #添加第二行
    '''#确定爬取的网址(可见及可爬),找到headers和设置headers。'''
    url='http://www.win4000.com/mobile_2340_0_0_{}.html'.format(str(page))   #修改的第三行     #如果换成http://www.win4000.com/meinvtag4_1.html,则for中xpath定位不到相应图片src,有点瑕疵
    #头3 可用
    headers={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
             'Connection':'keep-alive',
             'Host':'www.win4000.com',
             'Cookie':'',
             'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'}
    # 头1  可用
    # headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'}  #下面header出现'latin-1' codec can't encode character '\u2026',复制的时候没展开,复制不全
    #头2     不可用
    # headers={'Accept':'text/html,application/xhtml+xm…ml;q=0.9,image/webp,*/*;q=0.8',
    #          'Connection':'keep-alive',
    #          'Host':'www.win4000.com','Cookie':'security_session_verify=0fa786…e28452325006c4a53c=1584149760',
    #          'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'}        #模拟浏览器访问,主要以键对的形式展现出来
    #请求头主要使用uer-agent

    '''发送请求及获取数据'''
    response=requests.get(url,headers=headers)
    data=response.text
    # print(data)   没问题

    '''解析数据'''#采用parsel转化为selector的对象,从而能调用selector的方法
    data=parsel.Selector(data)  #Selector要大写
    # print(data)
    #找到图片所在/html/body/div[5]/div/div[3]/div[1]/div[1]/div[2]/div/div/ul/li[1]/a     #出问题,提取不出数据
    data_list=data.xpath('//div[@class="Left_bar"]//ul/li/a/@href').extract()    #这样的路径可以提出数据
    # print(data_list)    #文件可以发现,没问题

    '''遍历列表的所有元素'''
    for img in data_list:
        # print(img)    #没问题
        '''# 发送相册url的请求,得到响应'''
        response_2=requests.get(img,headers=headers).text
        # print(data)           #能输出,这步没问题

        '''#解析为selector对象,找到图片url地址'''
        data_2=parsel.Selector(response_2)
        # print(data_2)       #能输出,没问题
        # # /html/body/div[5]/div/div[3]/div[1]/div[1]/div[2]/div/div/ul/li[1]/a/img   提不出数据
        # # img_url=data_2.xpath('//div[@class="clearfix"]/li/a/img/@src').extract_first()  #提不出数据
        img_url = data_2.xpath('//div[@class="main-wrap"]/div[@class="pic-meinv"]/a/img/@src').extract_first()   #可以提数据
        # print(img_url)  #输出能打开的不同图片地址,没问题
        #但换成另个网址,如最开始注释的网址,则输出不能打开图片的相同地址,有问题(分析认为是xpath定位不准,之后改用re试试)  问题1:输出None,则上一行少打了@(解决);问题2:http://static.win4000.com/home/images/placeholder.jpg,有的网址xpath定位不准

        '''请求图片地址'''
        img_data=requests.get(img_url,headers).content  #content返回图片、音频等内容

        '''保存数据'''
        Meitu=img_url.split('/')[-1]
        # print(Meitu)        #发现只返回一张图片,没起到遍历的效果
        with open('D:\python\pycharm\PyCharm 2019.3.3\Meitu\Img\\'+Meitu,'wb') as f:
            print('正在保存图片:',Meitu)
            f.write(img_data)

在这里插入图片描述
模仿qq群821460695清风老师代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值