[定向爬虫] 网络爬虫实例2-淘宝定向爬虫

import requests  
import re  
import time  

#获取html页面  
def getHTMLText(url):  
    try:  
        r = requests.get(url,timeout = 30)  
        r.raise_for_status()  
        r.encoding = "utf-8"  #可以节约时间  
        return r.text  
    except:  
        return ""  
    
#对获取的每一个页面进行解析,ilt是结果的列表类型  
def parsePage(ilt,html):  
    try:  
        #"view_price":"149.00"  
        plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)        
        #"raw_title":"2017春季新款双肩包女韩版时尚pu背包流苏子母包百搭学院风书包"  
        tlt = re.findall(r'\"raw_title\"\:\".*?\"',html)  
        for i in range(len(plt)):  
            #字符串分割获取商品的价格,eval()函数能够将字符串的最外层的双引号或单引号去掉  
            price = eval(plt[i].split(':')[1])   
            title = eval(tlt[i].split(":")[1])   
            ilt.append([price,title])  
    except:  
        print("")  
        
#将解析后的信息输出  
def printGoodsList(ilt):  
    tplt = "{:4}\t{:8}\t{:16}"  
    #打印输出信息的表头  
    print(tplt.format("序号","价格","商品名称"))   
    count = 0  
    for i in ilt:  
        count +=1        #序号,价格,名称  
        print(tplt.format(count,i[0],i[1]))  
        
#定义主函数,记录整个程序运行的过程  
def main():  
    start_time = time.time()  
    #搜索关键词goods  
    goods = "书包"  
    #设定向下一页爬取的深度,爬取页数depth  
    depth = 2  
    #爬取的URL  
    start_url = "https://s.taobao.com/search?q=" + goods  
    #定义变量infoList 表示输出结果  
    infoList = []  
    #因为每一个页面URL不同,需要对每一个页面进行单独访问和处理  
    for i in range(depth):  
        try:#使用try多获取页面进行异常判断,如果某页面解析出问题,可以跳过该页面,往下继续,不会造成出现解析错误,程序停止  
            #对每一个页面的URL链接进行设计,因为淘宝每个页面显示44个商品  
            url = start_url + '&s=' + str(44*i)  
            html = getHTMLText(url)  #获取页面内容  
            parsePage(infoList,html) #对获取的页面进行处理  
        except:  
            #continue语句只是结束本次循环,而不会终止循环的执行。break语句则是终止整个循环过程  
            continue  
    #将获取的页面信息输出  
    printGoodsList(infoList)  
    end_time = time.time()  
    print(end_time-start_time)  
    print(round(end_time-start_time))
    
main()  

  

posted @ 2017-09-16 16:17  推杯问盏  阅读(220)  评论(0编辑  收藏  举报