urllib库学习 - 京东商城手机图片爬虫

概述

使用urllibre模块爬取京东商城手机分类下的所有图片

思路:

1.通过for循环控制每一页的爬取,并组合每一页的url

url="https://list.jd.com/list.html?cat=9987,653,655&page="+page

2.爬取每一页中的数据,通过正则提取其中所有图片的url

提取规则:

2.1 先提取包含手机商品的列表

part1=r'<ul class="gl-warp clearfix">.+?<div class="clr">'

value1=re.compile(part1,flags=re.DOTALL).findall(html)[0]

2.2 再提取每一张图片的url

part2=r'<img width="220" height="220" data-img="1" data-lazy-img="(.+?)">'

value2=re.compile(part2).findall(value1)

3.再次通过for循环下载每一张图片,图片名字为 页码+编号

源码

# !/usr/bin/env python
# -*- coding:utf-8 -*-

"""
爬取京东商城手机图片
"""

import urllib.request
import urllib.parse
import re
import time


def crawl():
    base_url='https://list.jd.com/list.html?cat=9987,653,655&page='
    for page in range(1,174):
        url=base_url+str(page)
        crawl_page(url,page)
        time.sleep(1)


def crawl_page(url,page):
    print('开始下载第{}页'.format(page))
    headers={
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'
    }
    req=urllib.request.Request(url=url,headers=headers)
    resp=urllib.request.urlopen(req)

    if resp.status==200:
        html=resp.read().decode('utf-8')

        part1=r'<ul class="gl-warp clearfix">.+?<div class="clr">'
        value1=re.compile(part1,flags=re.DOTALL).findall(html)[0]

        part2=r'<img width="220" height="220" data-img="1" data-lazy-img="(.+?)">'
        value2=re.compile(part2).findall(value1)

        num=1
        for src in value2:
            imgname='/home/brandon/PythonProjects/MySpider/data/京东手机图片爬虫/{page}-{num}.jpg'.format(page=str(page),num=str(num))
            imgurl='https:{src}'.format(src=src)

            try:
                urllib.request.urlretrieve(imgurl,filename=imgname)
            except Exception as e:
                print(e)
            finally:
                print('第{}页-第{}张图片下载完成'.format(page,num))
                num+=1


if __name__ == '__main__':
    crawl()


运行结果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值