Python爬虫抓取马蜂窝游记的照片 基于xpath

之前都只是使用urllib和urllib2这两个类库,接下来要发掘更多好用的工具了,比如这个xpath,对于分析HTML的网页结构实在是太方便。

http://blog.csdn.net/freeking101/article/details/52614291

http://www.w3school.com.cn/xpath/index.asp

大家可以参考一下这个网址学习一下xpath的使用方法,好了下面就说回我的代码实现

首先观察一下马蜂窝的游记HTMLsource

图片1图片1

然后就可以写出获得图片地址和保存图片的函数

def writePhoto(soup,path):
    print u"开始保存图片"
    img=soup.xpath('//img/@data-src')
    total_img=0
    for myimg in img:
        total_img += 1
        print myimg
        urllib.urlretrieve(myimg,path+'%s.jpg'%total_img)
        print u"已经保存第",total_img,u"张照片"
    print u"总共保存第",total_img,u"张照片"
其他的基本上和以前的一样没什么好说的,但是我发现一个问题就是xpath不是万能,可能我还没深入了解它的使用吧,但是我在获取游记的背景音乐地址却没能成功

图片2

图片2

接下来是源码

# -*- coding: cp936 -*-


__author__ = 'Thor'
# -*- coding:utf-8 -*-
import re
import urllib
import urllib2
import os
from lxml import etree


   


def writePhoto(soup,path):
    print u"开始保存图片"
    img=soup.xpath('//img/@data-src')
    total_img=0
    for myimg in img:
        total_img += 1
        print myimg
        urllib.urlretrieve(myimg,path+'%s.jpg'%total_img)
        print u"已经保存第",total_img,u"张照片"
    print u"总共保存第",total_img,u"张照片"

def getTitle(soup):
    result=soup.xpath('//div/h1/text()')[0]
    result=re.sub('\\n','',result)
    result=re.sub('\.','',result)
    print "title:"+result
    if result:
        return result
    else:
        return None

def mkdir(path):
    path=path.strip()
    isExists=os.path.exists(path)
    if not isExists:
        print u"创建了名为",path,u"的文件夹"
        os.makedirs(path)
        return True
    else:
        print u"名为",path,u"的文件夹已经创建"
        return False

def start(html,path):
    print u"kkkkkkkkkkkkkkkkkkk"
    title=getTitle(soup)
    path=path+title+"\\"
    mkdir(path)
    writePhoto(soup,path)

    
print u"请输入一个马蜂窝的游记网址"
url=(raw_input())
path="C:\Users\Administrator\Desktop\Mafengwo\\"
print url
request=urllib2.Request(url)
response=urllib2.urlopen(url)
soup = etree.HTML(response.read().decode('utf-8'))
print u"连接成功"
start(soup,path)

来看一下结果吧

图片3图片3
图片4图片4

保存成独立的文件夹

图片5图片5

图片6

以后屏保就不要用系统默认的啦。


猜你喜欢

转载自blog.csdn.net/sinat_33487968/article/details/62437265