昨天做了一个煎蛋网妹子图的爬虫,个人感觉效果不错。但是每次都得重复的敲辣么多的代码(相比于Java或者其他语言的爬虫实现,Python的代码量可谓是相当的少了),就封装了一下!可以实现对批量网址以及单个网址的爬虫!
核心代码
# coding:UTF-8# 导入我们需要的网络模块,正则表达式模块,以及产生随机数的模块import urllib2,urllib,re,random# 根据传入的URL网址,获得该网址对应的全部的html页面(纯网页,并没有做任何的解析)def getHtml(url,headers) : request = urllib2.Request(url,headers=headers) response = urllib2.urlopen(request) page = response.read() return page# 根据之前获得那个url对应的网页信息,将这张网页里面包含的所有的含有<img src=".+\.jpg"/>的url存储到一个列表中def getImageUrls(page): reg = r'src="(.+?\.jpg)"' imageReg = re.compile(reg) img_urls = re.findall(imageReg,page) return img_urls# 这是个测试的方法,并没有实际的价值。列出来的目的只是为了纪念一下,最终功能实现的这个过程,仅此!# def getTotalImageUrls(original_url,headers):# totalImageUrls = []# for item in range(1980, 1990):# original_url += original_url + str(item)# page = getHtml(original_url,headers)# images_url = getImageUrls(page)# totalImageUrls.append(images_url)# return totalImageUrls# 根据给定的路径,文件名,将指定的数据(这里是一张图片,是的。一张图片)写入到文件中。需要注意的是每次都需要关闭filedef writeToFile(path,name,data): file = open(path+name,'wb') file.write(data) file.close() print name+" has been Writed Succeed!"# 下载图片,并且调用刚才的 writeToFile(path,name,data): 函数。将图片直接写到对应的路径下面# 这里借助于一个random模块,为了产生图片之间尽量不重复的文件名,以防止文件的覆盖或者出现其他的问题def downloadImages(images_url,path,headers) : for i, item in enumerate(images_url): everypicture = getHtml(item,headers) # 此处下载之后的文件使用了item来命名是为了避免图片的覆盖 writeToFile(path, str(i+random.randint(1,100000000)) + ".jpg", everypicture)# 提供单个url网址内图片的下载def singleImageDownload(outputPath,targeturl,headers) : originalurl = targeturl page = getHtml(originalurl,headers) images_url = getImageUrls(page) downloadImages(images_url,path,headers)# 提供批量下载的函数,对未成功下载的提示未成功下载语句def batchImageDownload(outputPath, originalurl, headers, start, end): for item in range(2000, 4000): try: originalurl = 'http://bizhi.souutu.com/mnbz/' + str(item) + '.html' page = getHtml(originalurl) images_url = getImageUrls(page) downloadImages(images_url,headers) except: print str(item) + str(' web site cannot be spidered! Sorry!') continue# --------------------------------------------------------------------------------------------------# 下面是我们的测试代码,仅仅拿单个url页面做了个测试,亲测好使headers = { 'referer':'http://bizhi.souutu.com/mnbz/3712.html', 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36'}path = "F:\\pachong\\bizhi\\"url = 'http://bizhi.souutu.com/mnbz/3712.html'singleImageDownload(path,url,headers)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
后话
这里并没有使用类来进行封装,没有用BeautifulSoup的原因是我还没学到
无奈.装傻~ ( ̄▽ ̄)~* ( ̄▽ ̄)" ╮(╯▽╰)╭ ╮( ̄▽ ̄)╭
- 1
- 2
但是咧,这在Python中是不妨碍滴,照样爬嘛,(^__^) 嘻嘻……
我是新手,代码中可能有不恰当的地方,欢迎批评指正!
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow