zoukankan      html  css  js  c++  java
  • 爬虫 爬取天猫商品的封面信息

    # 爬取搜索字段的封面信息
    
    '''
    q : 搜索的类型 可以识别中文
    
    天猫控制登录字段:
    sort: 排序
    s:起始第几个商品   
    
    问题1: 把s删除以后,虽说可以跳过登陆,但是只能访问第一页了,何解?
    解决:  多次点击页面后发现,淘宝测试不完全,在点击跳转页面后,将其的url后的参数只保留
         q   totalPage   jumpto  三个字段后,就可以通过修改jumpto字段的值 来跳转到其他的页面
         
    问题2: 解决登陆问题后,发现无法提前知道totalpage的总页数
    解决:只要页面有显示,那我们就能拿到对应的数据,因此可以再search里输入totalPage字段,
    发现该字段在input输入框内,拿到对应的属性,通过css的find查找,获得其值
    '''
    
    from requests_html import HTMLSession
    
    session = HTMLSession()
    
    keyword = input('输入要爬取的商品:')
    
    
    params = {
        'totalPage':12,
        'jumpto':2,
        'q':keyword
    }
    
    url = 'https://list.tmall.com/search_product.htm?'
    
    # 获取总页数:
    def get_totalPage(url,params):
        r = session.request(method='get',url=url,params=params)
        totalPage = int(r.html.find('[name="totalPage"]',first=True).attrs.get('value'))
        params['totalPage'] = totalPage
    
    # 改变jumpto字段的值,实现多次访问
    def get_params(params,totalPage):
        for i in range(1,totalPage+1):
            params['jumpto'] += 1
            yield params
    
    
    # 获取男装的信息
    def get_info(url,params):
        r = session.request(method='get',params=params,url=url)
        product_list = r.html.find('.product')
        for product_element in product_list:
            try:
                product_img_url = product_element.find('.productImg-wrap a img',first=True).attrs.get('src')
                product_title= product_element.find('.productTitle a',first=True).attrs.get('title')
                product_price = product_element.find('.productPrice em',first=True).attrs.get('title')
                product_shop_url = product_element.find('.productShop a',first=True).attrs.get('href')
                product_volume = product_element.find('.productStatus em',first=True).text
    
                print(product_img_url)
                print(product_title)
                print( product_price )
                print(product_shop_url)
                print(product_volume)
            except:
                print('部分商品详情存在问题!')  # 部分商品缺失字段,需要异常捕获
    
    get_info(url,params)
    for param in get_params(params,params['totalPage']):
        get_info(url,param)
  • 相关阅读:
    晚上打死个老鼠
    今早服务器出现的问题
    打球
    出于对Atlas自带AutoCompleteBehavior的不满,自定义了一个支持模版的AutoCompleteBehavior
    PetShop4.0项目分解
    WebSnapr-生成你的网站缩略图
    Lost HTML Intellisense within ASP.NET AJAX Controls
    调整调出输入法的顺序
    儿童网址大全
    gridview列 数字、货币和日期 显示格式
  • 原文地址:https://www.cnblogs.com/changwenjun-666/p/11355209.html
Copyright © 2011-2022 走看看