爬虫 爬取天猫商品的封面信息

# 爬取搜索字段的封面信息

'''
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)

猜你喜欢

转载自www.cnblogs.com/changwenjun-666/p/11355209.html