概述
使用urllib和re模块爬取京东商城手机分类下的所有图片
思路:
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()