• [定向爬虫] 网络爬虫实例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}	{:8}	{: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()  
    

      

  • 相关阅读:
    汇编学习笔记(3)[bx]和loop
    C++面试题-概念篇(一)
    命名空间的冷思考
    背包以及装备模块封装的思考
    虚函数,纯虚函数以及虚继承
    组件化开发在游戏开发当中的思考和汇总
    Netty和MINA之间的比较思考
    学习C++与Java之间的区别
    C++服务器年前总结
    C++Builder如何将当前时间与字符串相互转换
  • 原文地址:https://www.cnblogs.com/P3nguin/p/7531648.html
Copyright © 2020-2023  润新知