昨天做了一个煎蛋网妹子图的爬虫,个人感觉效果不错。但是每次都得重复的敲辣么多的代码(相比于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

# 根据给定的路径,文件名,将指定的数据(这里是一张图片,是的。一张图片)写入到文件中。需要注意的是每次都需要关闭file
def 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)

后话

这里并没有使用类来进行封装,没有用BeautifulSoup的原因是我还没学到

无奈.装傻~
( ̄▽ ̄)~* ( ̄▽ ̄)" ╮(╯▽╰)╭ ╮( ̄▽ ̄)╭ 

但是咧,这在Python中是不妨碍滴,照样爬嘛,(^__^) 嘻嘻……

我是新手,代码中可能有不恰当的地方,欢迎批评指正!

Python爬虫! 单爬,批量爬,这都不是事!的更多相关文章

  1. 简单的python爬虫教程:批量爬取图片

    python编程语言,可以说是新型语言,也是这两年来发展比较快的一种语言,而且不管是少儿还是成年人都可以学习这个新型编程语言,今天南京小码王python培训机构变为大家分享了一个python爬虫教程. ...

  2. python爬虫Scrapy(一)-我爬了boss数据

    一.概述 学习python有一段时间了,最近了解了下Python的入门爬虫框架Scrapy,参考了文章Python爬虫框架Scrapy入门.本篇文章属于初学经验记录,比较简单,适合刚学习爬虫的小伙伴. ...

  3. Python爬虫实战二之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...

  4. Python爬虫实战一之爬取糗事百科段子

    大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...

  5. 转 Python爬虫实战二之爬取百度贴吧帖子

    静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...

  6. 转 Python爬虫实战一之爬取糗事百科段子

    静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...

  7. python爬虫学习01--电子书爬取

    python爬虫学习01--电子书爬取 1.获取网页信息 import requests #导入requests库 ''' 获取网页信息 ''' if __name__ == '__main__': ...

  8. python爬虫:了解JS加密爬取网易云音乐

    python爬虫:了解JS加密爬取网易云音乐 前言 大家好,我是"持之以恒_liu",之所以起这个名字,就是希望我自己无论做什么事,只要一开始选择了,那么就要坚持到底,不管结果如何 ...

  9. Python爬虫:为什么你爬取不到网页数据

    前言: 之前小编写了一篇关于爬虫为什么爬取不到数据文章(文章链接为:Python爬虫经常爬不到数据,或许你可以看一下小编的这篇文章), 但是当时小编也是胡乱编写的,其实里面有很多问题的,现在小编重新发 ...

  10. Python爬虫实战一之爬取QQ音乐

    一.前言   前段时间尝试爬取了网易云音乐的歌曲,这次打算爬取QQ音乐的歌曲信息.网易云音乐歌曲列表是通过iframe展示的,可以借助Selenium获取到iframe的页面元素, 而QQ音乐采用的是 ...

随机推荐

  1. bzoj 4025: 二分图

    Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. 解题报告: ...

  2. 例10-1 uva11582(裴波那切数列)

    题意:你的任务是计算f(a^b)除以n的余数.其中f(0)=f(1)=1,且对于所有非负整数i,f(i+2)=f(i+1)+f(i). 思路: 由于是模运算,因此整个序列肯定会出现重复序列,所以先找出 ...

  3. BZOJ4926 皮皮妖的递推

    第二次乱出题.为了方便,以m=2为例,把原式变一下形,得f(i)+f(f(i-1))=i我们先无视掉那个-1,我们发现:诶,这个东西好像斐波那契数列.具体地,我们用f(n)表示把n用斐波那契数列进行拆 ...

  4. django rest-framework 2.请求和响应

    一.请求对象 REST 框架引入Request来扩展常规的HttpRequest,并提供了更灵活的请求解析.Request对象的核心功能是request.data属性. 导入方式: from rest ...

  5. 索引法则--IS NULL, IS NOT NULL 也无法使用索引

    Mysql 系列文章主页 =============== 1 数据准备 1.1 建表 DROP TABLE IF EXISTS staff; CREATE TABLE IF NOT EXISTS st ...

  6. 西安电话面试:谈谈Vue数据双向绑定原理,看看你的回答能打几分

    最近我参加了一次来自西安的电话面试(第二轮,技术面),是大厂还是小作坊我在这里按下不表,先来说说这次电面给我留下印象较深的几道面试题,这次先来谈谈Vue的数据双向绑定原理. 情景再现: 当我手机铃声响 ...

  7. jsp根据参数默认选中radio

    <% int vol = (Integer)request.getAttribute("cardtype") ; %> <input type="rad ...

  8. CSS缩写的样式

    熟悉和了解CSS的朋友都知道,CSS样式表有很多缩写方式.比如,定义字体.定义背景等,都可以把CSS代码缩写到一行.为了能更好的搞清楚CSS缩写方法,我收集整理了一些有关CSS简写的参考资料,也是对自 ...

  9. 跟着大佬重新入门DP

    数列两段的最大字段和 POJ2479 Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 41231 Acce ...

  10. 当我们在谈论JMM(Java memory model)的时候,我们在谈论些什么

    前面几篇中,我们谈论了synchronized.final以及voilate的用法和底层实现,都绕不开一个话题-Java内存模型(java memory model,简称JMM).Java内存模型是保 ...