zoukankan      html  css  js  c++  java
  • 爬虫9-淘宝商品信息定向爬虫

    功能描述:

    目标  获取淘宝搜索页面的信息,提取其中的商品信息名称和价格

    理解  淘宝的搜索接口 翻页的处理

    技术路线  requests re

    当我们在淘宝上搜索书包时:

     观察淘宝页面可知每一页共44个商品。

    同时通过robots协议,发现不支持爬取。

    程序的结构设计:

    1、提交商品搜索需求,循环获取页面

    2、对于每个页面,提取商品名称和价格信息

    3、将信息输出在屏幕上

    import requests
    import re
    
    def getHTMLText(url):
        print('')
        
    def parserPage(ilt,html):
        print('')
        
    def printGoodList(ilt):
        print('')
    
    def main():
        goods='书包'#搜索关键词
        depth=2#爬取深度
        start_url='https://s.taobao.com/search?q='+goods#初始链接
        infoList=[]#输出列表
        for i in range(depth):
            try:
                url=start_url+'&s='+str(44*i)
                html=getHTMLText(url)
                parserPage(infoList,html)
            except:
                continue
        printGoodList(infoList)
    main()

    代码编写习惯,先写框架,再填充丰满。

     完整程序:

    import requests
    import re
    
    def getHTMLText(url):
        try:
            r=requests.get(url,timeout=30)
            r.raise_for_status()
            r.encoding=r.apparent_encoding
            return r.text
        except:
            return ''
        
    def parserPage(ilt,html):
        try:
            plt=re.findall(r'"view_price":"[d.]*"',html)
            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 printGoodList(ilt):
        #打印模板
        tplt='{:4}	{:8}	{:16}'
        print(tplt.format('序号','价格','商品名称'))
        count=0
        for q in ilt:
            count=count+1
            print(tplt.format(count,q[0],q[1]))
    
    def main():
        goods='书包'#搜索关键词
        depth=2#爬取深度
        start_url='https://s.taobao.com/search?q='+goods#初始链接
        infoList=[]#输出列表
        for i in range(depth):
            try:
                url=start_url+'&s='+str(44*i)
                html=getHTMLText(url)
                parserPage(infoList,html)
            except:
                continue
        printGoodList(infoList)
    main()

    输出;

  • 相关阅读:
    ListView具有多种item布局——实现微信对话列
    CSDN 2013年度博客之星评选——分享几张厦门杭州的美图
    不做旁观者,给博主最有力的支持——博客之星评选,期待您的支持,谢谢路过的朋友投上您宝贵的一票
    Android应用中使用及实现系统“分享”接口
    android手势创建及识别
    JSON数据源的多值参数实现
    葡萄城报表本地设计器
    如何设计带查询条件的报表
    巧用SQL语句补足不完全数据报表
    表格数据分组报表
  • 原文地址:https://www.cnblogs.com/rayshaw/p/8620920.html
Copyright © 2011-2022 走看看