爬取过程:
1.通过 urllib.request.urlopen(url).read() 读取对应url的源代码
2.根据第一个正则表达式进行第一次信息过滤。
3.在第一次过滤的基础上再根据第二个正则表达式进行第二次信息过滤。提取出url上所有目标的图片链接。
4.将提取出的图片链接储存在一个列表中,并遍历该列表。
5.通过urllib.request.urlretrieve(imageurl filename=imagename)存储到本地。
6.为防止爬取过程中爬取某个图片时异常,可以用try...except抛出异常。
7.用for函数将该类下的所有url都爬取一遍。
伪代码:
def craw(url,page):
data1 = urllib.request.urlopen(url).read()
pattern1 = " "
result1 = re.compile(pattern1).findall(data1)
pattern2 = " "
imagelist = re.compile(pattern2).findall(result1)
for imageurl in imagelist:
try:
excpet:
for i in range(1,100):
url = " "
carw(url,i)
以爬取京东手机图片为例
完整代码如下:
import re
import urllib.request
def craw(url,page):
html1 = urllib.request.urlopen(url).read()
html1=str(html1)
pat1='<div id="plist".+?<div class="page clearfix">'
result1=re.compile(pat1).findall(html1)
result1=result1[0]
pat2='<img width="220" height="220" data-img="1" data-lazy-img="//(.+?\.jpg)">'
imagelist=re.compile(pat2).findall(result1)
x=1
for imageurl in imagelist:
imagename = "C:/Users/machao/Desktop/临时文件/Python 项目/爬取内容/"+str(page)+str(x)+".jpg"
imageurl="http://"+imageurl
try:
urllib.request.urlretrieve(imageurl,filename=imagename)
except urllib.error.URLError as e:
if hasattr(e,"code"):
x+=1
if hasattr(e,"reason"):
x+=1
x+=1
for i in range(1,100):
url="http://list.jd.com/list/html?cat=9987,653,655&page="+str(i)
craw(url,i)