爬虫 爬取天猫商品的封面信息
# 爬取搜索字段的封面信息 ''' 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)
posted on 2019-08-14 22:46 michael-chang 阅读(405) 评论(0) 编辑 收藏 举报