一个简单的爬取csdn博客图片的爬虫
2019年8月15日
爬虫的实现方法为爬取整个博客的html文件,然后字符串匹配找到 “https://img-blog.csdn.net”,这个字符串,因为我翻了一下博客的html文件,发现图片大多数情况下都是从这个网址加载的,只要找到这个字符串,找到结束的那个引号后做字符串截取把完整的链接截取出来后下载就行,(其实一般来说不应该这么做的,比较靠谱的方法是找到。”\<img>”这个标签,然后在这个标签里面匹配src的网址,但是很显然,我没这个干,懒得操行,能用就行)。接下来是源码,由于wordpress不让上传python文件,所以我就直接复制粘贴了。
import urllib.request
import os
#to open the url
def url_open(url):
req=urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0')
response=urllib.request.urlopen(url)
html=response.read()
return html
#to get the num of page like 1,2,3,4...
def get_page(url):#这个模块之前是用来翻页的,现在没用了
html=url_open(url).decode('utf-8')
a=html.find('current-comment-page') #add the 23 offset th arrive at the [2356]
b=html.find(']',a)
#print(html[a:b])
return html[a+23:b]
#find the url of imgs and return the url of arr
def find_imgs(url):
html=url_open(url).decode('utf-8')
img_addrs=[]
a=html.find('https://img-blog.csdn.net')
while a!=-1:
b=html.find('"',a,a+255) # if false : return -1
if b!=-1:
img_addrs.append(html[a:b+1])
else:
b=a+1
a=html.find('https://img-blog.csdn.net',b)
#print(img_addrs)
return img_addrs#字符串匹配找到所有的图片的链接,存进列表
#print('http:'+each)
#save the imgs
def save_imgs(folder,img_addrs):
i = 0
for each in img_addrs:
filename=each.split('/')[-1] #get the last member of arr,that is the name
filename = filename[:-1]
filename =filename + '_%d.jpg'%(i)#修改文件格式为jpg
i+=1
img = each[:-1]#为防止有重名的,加后缀
with open(filename,'wb') as f:
img = url_open(img)
f.write(img)
def download_mm(folder='mm',pages=10):
if not os.path.exists('mm'):
os.mkdir(folder)
os.chdir(folder)
url='https://blog.csdn.net/Cloudox_/article/details/53465923'#这个就是博客的地址
#page_num=int(get_page(url))
img_addrs=find_imgs(url)
save_imgs(folder,img_addrs)
##for i in range(pages):
# page_num -= i
# page_url = url + 'page-' + str(page_num) + '#comments'
# img_addrs=find_imgs(page_url)
## save_imgs(folder,img_addrs)
if __name__ == '__main__':
download_mm()
Previous
浅谈编译过程
Newer