学习爬虫过程遇到的各种问题集锦

用xpath爬取 https://www.ivsky.com/tupian/haiyangshijie/,
问题1:检查了好多遍代码,一直如下错误报错
学习爬虫过程遇到的各种问题集锦_第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)

你可能感兴趣的:(学习爬虫过程遇到的各种问题集锦)