用xpath爬取 https://www.ivsky.com/tupian/haiyangshijie/,
问题1:检查了好多遍代码,一直如下错误报错
开始下载 形态各异的海马图片(11张) https://www.ivsky.com/tupian/haima_v50562/
None
Traceback (most recent call last):
File "20190422ivskyxpath.py", line 59, in
img_titles1=html1.xpath('//ul[@class="pli"]/li/div/a/@title')
AttributeError: 'NoneType' object has no attribute 'xpath'
后来经过热心的朋友指点, 发现是爬取的图片网站列表里面的这个https://www.ivsky.com/tupian/haima_v50562/ 根本打不开, 最后做了异常判断排除解决。
问题2 :
下载后保存的图片竟然打不开,后来记事本打开后发现是乱码,加了.decode(‘utf-8’),也就是resp=requests.get(url,headers=headers).content.decode(‘utf-8’) 解决。
还有一种情况,记得爬取贴吧时一些保存的图片打不开, 用记事本打开发现里面是一些网页的html代码,后来发现是正则匹配错误问题,修改正则后解决。
问题3:
保存在一个文件夹里的图片不停的被后来抓取的图片覆盖掉, 百思不得其解,觉得好神奇,后来经热心朋友指点发现是吧变量放在for 循环内外出现的问题, 修改后解决此问题,用一些小例子做测试
#测试一
x=0
for i in range(0,10):
for j in range(0,10):
print x
x+=1
for i in range(0,10):
x=0
for j in range(0,10):
print x
x+=1
#测试二
>>> x=0
>>> for i in range(0,10):
print('the i is',i)
x=0
for j in range(0,10):
print('the j is',j)
print('the x is',x)
x+=1
>>> for i in range(0,10):
print('the i is',i)
x=0
for j in range(0,10):
print('the j is',j)
print('the x is',x)
x=x+1
问题4:
拼接url,
字符串和列表的拼接,对应部分代码如下:
img_urls=html.xpath('//ul[@class="ali"]/li/div/a/@href')
#print(img_urls)
url1='https://www.ivsky.com'
urls=[ url1+x for x in img_urls]
print(urls)
问题5:
with open("./%s/%s"%(kw,name),“wb”) as f: 的解释
./ 是当前目录, 那么第二个/呢 是二层目录
比如 with open("./Data/iris.csv", “wb”) as f:
表示:打开当前文件夹(和程序所在同一个文件夹)下的 Data 文件夹下的 iris.csv 文件,以后的操作是 二进制写入
问题6. 文件路径问题,os的用法
A
"""
os.getcwd() 获取当前文件所在的路径
os.path.join()路径组合 传两个参数,第一个参数可以是绝对路径和相对路径,第二个参数可以是文件夹名称,也可以是文件名
if not os.path.exists(img_paths): 判断images文件夹是否存在
os.mkdir('./images') 根据相对路径创建文件夹(os.makedirs('./images/img01/')可以创建多级目录)
"""
#创建文件路径
img_paths = os.path.join(os.getcwd(),'images1',img_title)
if not os.path.exists(img_paths):
os.makedirs(img_paths)
for i in img_urls2:
print(i)
ii=requests.get(i,headers=headers).content
#with open("%s.jpg"% x,"wb") as f:
with open("./images1/%s/%s.jpg"%(img_title, x),"wb") as f:
f.write(ii)
f.close()
x=x+1
B
#os.chdir(r’C:\Users\Administrator\Desktop\data’) # 更改工作目录为桌面
C
if not os.path.exists("./" + kw):
os.mkdir("./" + kw)
with open("./%s/%s"%(kw,name),"wb") as f:
f.write(data)