鱼C论坛

 找回密码
 立即注册
查看: 5777|回复: 17

[已解决]爬虫

[复制链接]
发表于 2020-7-16 14:41:20 | 显示全部楼层 |阅读模式
20鱼币
现在的淘宝(宝贝名称,销量等数据)怎么爬?有没有大佬能指导下?
最佳答案
2020-7-16 14:41:21
我们不创造代码,我们只是代码的搬运工
淘宝商品信息爬虫:
  1. import re
  2. import os
  3. import json
  4. import time
  5. import requests
  6. import jsonpath
  7. from openpyxl import Workbook, load_workbook

  8. print('欢迎使用淘宝查询助理')
  9. print('本程序旨在帮助您更容易挑选到您所需要的商品')
  10. good = input('请输入要查询的商品名称:')
  11. low_price = int(input('请输入您所能接受的商品最低价格:'))
  12. high_price = int(input('请输入您所能接受的商品最高价格:'))
  13. print('请稍等片刻,数据正在获取中')
  14. print('{0}.xlsx正在创建中,您可以在本程序同目录下找到'.format(good))
  15. print('请等待程序关闭后再打开表格,谢谢配合!')
  16. print('祝您购物愉快!\n')
  17. print('-------------------------------------------------------------------')
  18. class TaoBaoSpider(object):
  19.     """淘宝爬虫"""
  20.     def __init__(self, key, start_price, end_price):

  21.         self.headers = {
  22.             'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30'
  23.                           ' (KHTML, like Gecko) Version/10.0 Mobile/14E277 Safari/602.1',
  24.         }
  25.         self.start_price = start_price
  26.         self.end_price = end_price
  27.         self.count = 1
  28.         self.rank_dict = {
  29.             '0': '无',
  30.             '1': '1心',
  31.             '2': '2心',
  32.             '3': '3心',
  33.             '4': '4心',
  34.             '5': '5心',
  35.             '6': '1钻',
  36.             '7': '2钻',
  37.             '8': '3钻',
  38.             '9': '4钻',
  39.             '10': '5钻',
  40.             '11': '1蓝冠',
  41.             '12': '2蓝冠',
  42.             '13': '3蓝冠',
  43.             '14': '4蓝冠',
  44.             '15': '5蓝冠',
  45.             '16': '1金冠',
  46.             '17': '2金冠',
  47.             '18': '3金冠',
  48.             '19': '4金冠',
  49.             '20': '5金冠'
  50.         }
  51.         self.key = key
  52.         self.file_path = f'{self.key}.xlsx'
  53.         self.shop_set = set()
  54.         if os.path.exists(self.file_path):
  55.             self.wb = load_workbook(self.file_path)
  56.             self.ws = self.wb.active
  57.             max_row = self.ws.max_row
  58.             for row in range(2, max_row + 1):
  59.                 value = self.ws.cell(row=row, column=2).value.strip()
  60.                 self.shop_set.add(value)

  61.         else:
  62.             self.wb = Workbook()
  63.             self.ws = self.wb.active
  64.             self.ws.append(['序号', '商品ID', '店铺ID', '商城类型', '标题', '链接', '价格', '月销', '地区', '店铺名称',
  65.                             '店铺等级', '评论总数', '店铺评分', '相关描述', '图片评论', '追加评论', '好评', '中评', '差评', '与描述相符'])

  66.     def get_img_add_key(self, item_id, user_id, s_type):

  67.         url = f'https://rate.taobao.com/detailCommon.htm?auctionNumId={item_id}&userNumId={user_id}'

  68.         headers = self.headers
  69.         headers['Referer'] = f'https://item.taobao.com/item.htm?id={item_id}'

  70.         response = requests.get(url, headers=headers)
  71.         info = re.findall('\((.+}?)\)', response.text)[0]
  72.         info = json.loads(info)
  73.         data = info['data']
  74.         keys = data['impress']
  75.         keys = [f"{key['title']}({key['count']})" for key in keys]
  76.         keys = ','.join(keys)
  77.         if s_type == '淘宝':
  78.             add_comment = data['count']['additional']
  79.             img_comment = data['count']['pic']
  80.             god_comment = data['count']['good']
  81.             mid_comment = data['count']['normal']
  82.             bad_comment = data['count']['bad']
  83.         else:
  84.             add_comment = data['count']['additional']
  85.             img_comment = data['count']['pic']
  86.             god_comment = data['count']['good']
  87.             mid_comment = data['count']['normal']
  88.             bad_comment = data['count']['bad']

  89.         correspond = data['correspond']

  90.         line = [keys, add_comment, img_comment, god_comment, mid_comment, bad_comment, correspond]
  91.         return line

  92.     def get_comment_key(self, item_id):
  93.         url = f'https://rate.tmall.com/listTagClouds.htm?itemId={item_id}'

  94.         response = requests.get(url, headers=self.headers)
  95.         print(response.text)
  96.         info = re.findall(r'\((.+}?)\)', response.text)[0]
  97.         info = json.loads(info)
  98.         keys = info['tags']['tagClouds']
  99.         keys = [f"{key['tag']}({key['count']})" for key in keys]
  100.         keys = ','.join(keys)
  101.         return keys

  102.     def get_info(self, data):
  103.         title = data['raw_title']
  104.         city = data['item_loc']
  105.         price = data['view_price']
  106.         item_id = data['nid']
  107.         url = data['detail_url']
  108.         if item_id in self.shop_set:
  109.             print(title, '存在')
  110.             self.count += 1
  111.             return

  112.         user_id = data['user_id']

  113.         if 'tmall' in url or 'mclick' in url:
  114.             s_type = '天猫'
  115.             url = 'https://detail.tmall.com/item.htm?id={}'.format(item_id)
  116.         elif 'taobao' in url:
  117.             s_type = '淘宝'
  118.             url = 'http://item.taobao.com/item.htm?id={}'.format(item_id)

  119.         else:
  120.             s_type = '未知'

  121.         time.sleep(5)
  122.         x_url = 'https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?data=%7B%22itemNumId%22%3A%22{}%22%7D'.format(
  123.             item_id)
  124.         try:
  125.             x_data = requests.get(x_url, headers=self.headers).json()['data']
  126.         except:
  127.             return
  128.         try:
  129.             shopName = x_data['seller']['shopName']
  130.         except:
  131.             shopName = ''

  132.         try:
  133.             rank = x_data['seller']['creditLevel']
  134.             rank = self.rank_dict[rank]
  135.         except:
  136.             rank = '无'
  137.         try:
  138.             youhui_json = json.loads(x_data['apiStack'][0]['value'])
  139.         except:
  140.             youhui_json = {}
  141.         try:
  142.             month_xiao = youhui_json['item']['sellCount']
  143.         except:
  144.             month_xiao = ''

  145.         # 评价数量
  146.         try:
  147.             comment_num = x_data['rate']['totalCount']
  148.         except KeyError:
  149.             comment_num = ''

  150.         line = self.get_img_add_key(item_id, user_id, s_type)

  151.         if shopName == '':
  152.             print('闲鱼?')
  153.             return

  154.         # 店铺评分
  155.         shop_source = x_data['seller']['evaluates']
  156.         shop_source = [':'.join([source['title'], source['score']]) for source in shop_source]
  157.         shop_source = ','.join(shop_source)

  158.         item = [str(self.count), item_id + '\t', user_id + '\t', s_type, title, url, price, month_xiao, city, shopName, rank, comment_num, shop_source]
  159.         item += line
  160.         print(item)
  161.         self.ws.append(item)
  162.         self.wb.save(self.file_path)
  163.         self.count += 1
  164.         self.shop_set.add(item_id)

  165.     def search(self):
  166.         session = requests.session()
  167.         cookie = 't=85db5e7cb0133f23f29f98c7d6955615; cna=3uklFEhvXUoCAd9H6ovaVLTG; isg=BM3NGT0Oqmp6Mg4qfcGPnvDY3-pNqzF2joji8w9SGWTYBu241_taTS6UdFrF3Rk0; miid=983575671563913813; thw=cn; um=535523100CBE37C36EEFF761CFAC96BC4CD04CD48E6631C3112393F438E181DF6B34171FDA66B2C2CD43AD3E795C914C34A100CE538767508DAD6914FD9E61CE; _cc_=W5iHLLyFfA%3D%3D; tg=0; enc=oRI1V9aX5p%2BnPbULesXvnR%2BUwIh9CHIuErw0qljnmbKe0Ecu1Gxwa4C4%2FzONeGVH9StU4Isw64KTx9EHQEhI2g%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; mt=ci=0_0; hibext_instdsigdipv2=1; JSESSIONID=EC33B48CDDBA7F11577AA9FEB44F0DF3'

  168.         session.headers = {
  169.             'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E277 Safari/602.1',
  170.             'cookie': cookie,
  171.             'referer': 'https://s.taobao.com/search?q=%E5%86%B0%E7%AE%B1&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20190804&ie=utf8&sort=sale-desc&bcoffset=0&p4ppushleft=%2C48&s=1364'
  172.         }

  173.         url = 'https://s.taobao.com/search?rec_type=1&q={}&sort=sale-desc&s=0&ajax=true&data-value=396&filter=reserve_price%5B{}%2C{}%5D'.format(self.key, self.start_price, self.end_price)
  174.         start_flag = 0
  175.         while True:
  176.             if start_flag > 10:
  177.                 session.headers['cookie'] = 't=85db5e7cb0133f23f29f98c7d6955615; cna=3uklFEhvXUoCAd9H6ovaVLTG; isg=BM3NGT0Oqmp6Mg4qfcGPnvDY3-pNqzF2joji8w9SGWTYBu241_taTS6UdFrF3Rk0; miid=983575671563913813; thw=cn; um=535523100CBE37C36EEFF761CFAC96BC4CD04CD48E6631C3112393F438E181DF6B34171FDA66B2C2CD43AD3E795C914C34A100CE538767508DAD6914FD9E61CE; _cc_=W5iHLLyFfA%3D%3D; tg=0; enc=oRI1V9aX5p%2BnPbULesXvnR%2BUwIh9CHIuErw0qljnmbKe0Ecu1Gxwa4C4%2FzONeGVH9StU4Isw64KTx9EHQEhI2g%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; mt=ci=0_0; hibext_instdsigdipv2=1; JSESSIONID=EC33B48CDDBA7F11577AA9FEB44F0DF3'
  178.                 start_flag = 0
  179.             req = session.get(url).json()
  180.             try:
  181.                 capurl = req['url']
  182.                 print('验证码', capurl)
  183.                 time.sleep(1)
  184.                 # cookies = self.loop.run_until_complete(main(capurl))
  185.                 # print(cookies)
  186.                 # session.cookies.set('x5sec', cookies['x5sec'])
  187.                 start_flag += 1
  188.             except:
  189.                 break

  190.         page = jsonpath.jsonpath(req, '$..totalPage')[0]
  191.         datas = req['mods']['itemlist']['data']['auctions']
  192.         for data in datas:
  193.             self.get_info(data)

  194.         for p in range(1, page):
  195.             p_va = p * 44
  196.             url = 'https://s.taobao.com/search?rec_type=1&q={}&sort=sale-desc&s={}&ajax=true&data-value=396&filter=reserve_price%5B{}%2C{}%5D'.format(self.key, p_va, self.start_price, self.end_price)
  197.             print(url)
  198.             flag = 0
  199.             while True:
  200.                 if flag > 10:
  201.                     session.headers['cookie'] = 't=85db5e7cb0133f23f29f98c7d6955615; cna=3uklFEhvXUoCAd9H6ovaVLTG; isg=BM3NGT0Oqmp6Mg4qfcGPnvDY3-pNqzF2joji8w9SGWTYBu241_taTS6UdFrF3Rk0; miid=983575671563913813; thw=cn; um=535523100CBE37C36EEFF761CFAC96BC4CD04CD48E6631C3112393F438E181DF6B34171FDA66B2C2CD43AD3E795C914C34A100CE538767508DAD6914FD9E61CE; _cc_=W5iHLLyFfA%3D%3D; tg=0; enc=oRI1V9aX5p%2BnPbULesXvnR%2BUwIh9CHIuErw0qljnmbKe0Ecu1Gxwa4C4%2FzONeGVH9StU4Isw64KTx9EHQEhI2g%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; mt=ci=0_0; hibext_instdsigdipv2=1; JSESSIONID=EC33B48CDDBA7F11577AA9FEB44F0DF3'

  202.                     flag = 0
  203.                 req = session.get(url).json()
  204.                 try:
  205.                     capurl = req['url']
  206.                     print('验证码', capurl)
  207.                     # cookies = self.loop.run_until_complete(main(capurl))
  208.                     # print(cookies)
  209.                     # session.cookies.set('x5sec', cookies['x5sec'])
  210.                     time.sleep(1)
  211.                     flag += 1
  212.                 except:
  213.                     break

  214.             datas = req['mods']['itemlist']['data']['auctions']
  215.             for data in datas:
  216.                 self.get_info(data)


  217. if __name__ == '__main__':
  218.     tb = TaoBaoSpider(good, low_price, high_price)
  219.     tb.search()
复制代码


搬运来自【鱼c论坛作品展示区】

如果您对我的答案感到满意,请设置最佳答案

最佳答案

查看完整内容

我们不创造代码,我们只是代码的搬运工。 淘宝商品信息爬虫: 搬运来自【鱼c论坛作品展示区】 如果您对我的答案感到满意,请设置最佳答案。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-16 14:41:21 | 显示全部楼层    本楼为最佳答案   
我们不创造代码,我们只是代码的搬运工
淘宝商品信息爬虫:
  1. import re
  2. import os
  3. import json
  4. import time
  5. import requests
  6. import jsonpath
  7. from openpyxl import Workbook, load_workbook

  8. print('欢迎使用淘宝查询助理')
  9. print('本程序旨在帮助您更容易挑选到您所需要的商品')
  10. good = input('请输入要查询的商品名称:')
  11. low_price = int(input('请输入您所能接受的商品最低价格:'))
  12. high_price = int(input('请输入您所能接受的商品最高价格:'))
  13. print('请稍等片刻,数据正在获取中')
  14. print('{0}.xlsx正在创建中,您可以在本程序同目录下找到'.format(good))
  15. print('请等待程序关闭后再打开表格,谢谢配合!')
  16. print('祝您购物愉快!\n')
  17. print('-------------------------------------------------------------------')
  18. class TaoBaoSpider(object):
  19.     """淘宝爬虫"""
  20.     def __init__(self, key, start_price, end_price):

  21.         self.headers = {
  22.             'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30'
  23.                           ' (KHTML, like Gecko) Version/10.0 Mobile/14E277 Safari/602.1',
  24.         }
  25.         self.start_price = start_price
  26.         self.end_price = end_price
  27.         self.count = 1
  28.         self.rank_dict = {
  29.             '0': '无',
  30.             '1': '1心',
  31.             '2': '2心',
  32.             '3': '3心',
  33.             '4': '4心',
  34.             '5': '5心',
  35.             '6': '1钻',
  36.             '7': '2钻',
  37.             '8': '3钻',
  38.             '9': '4钻',
  39.             '10': '5钻',
  40.             '11': '1蓝冠',
  41.             '12': '2蓝冠',
  42.             '13': '3蓝冠',
  43.             '14': '4蓝冠',
  44.             '15': '5蓝冠',
  45.             '16': '1金冠',
  46.             '17': '2金冠',
  47.             '18': '3金冠',
  48.             '19': '4金冠',
  49.             '20': '5金冠'
  50.         }
  51.         self.key = key
  52.         self.file_path = f'{self.key}.xlsx'
  53.         self.shop_set = set()
  54.         if os.path.exists(self.file_path):
  55.             self.wb = load_workbook(self.file_path)
  56.             self.ws = self.wb.active
  57.             max_row = self.ws.max_row
  58.             for row in range(2, max_row + 1):
  59.                 value = self.ws.cell(row=row, column=2).value.strip()
  60.                 self.shop_set.add(value)

  61.         else:
  62.             self.wb = Workbook()
  63.             self.ws = self.wb.active
  64.             self.ws.append(['序号', '商品ID', '店铺ID', '商城类型', '标题', '链接', '价格', '月销', '地区', '店铺名称',
  65.                             '店铺等级', '评论总数', '店铺评分', '相关描述', '图片评论', '追加评论', '好评', '中评', '差评', '与描述相符'])

  66.     def get_img_add_key(self, item_id, user_id, s_type):

  67.         url = f'https://rate.taobao.com/detailCommon.htm?auctionNumId={item_id}&userNumId={user_id}'

  68.         headers = self.headers
  69.         headers['Referer'] = f'https://item.taobao.com/item.htm?id={item_id}'

  70.         response = requests.get(url, headers=headers)
  71.         info = re.findall('\((.+}?)\)', response.text)[0]
  72.         info = json.loads(info)
  73.         data = info['data']
  74.         keys = data['impress']
  75.         keys = [f"{key['title']}({key['count']})" for key in keys]
  76.         keys = ','.join(keys)
  77.         if s_type == '淘宝':
  78.             add_comment = data['count']['additional']
  79.             img_comment = data['count']['pic']
  80.             god_comment = data['count']['good']
  81.             mid_comment = data['count']['normal']
  82.             bad_comment = data['count']['bad']
  83.         else:
  84.             add_comment = data['count']['additional']
  85.             img_comment = data['count']['pic']
  86.             god_comment = data['count']['good']
  87.             mid_comment = data['count']['normal']
  88.             bad_comment = data['count']['bad']

  89.         correspond = data['correspond']

  90.         line = [keys, add_comment, img_comment, god_comment, mid_comment, bad_comment, correspond]
  91.         return line

  92.     def get_comment_key(self, item_id):
  93.         url = f'https://rate.tmall.com/listTagClouds.htm?itemId={item_id}'

  94.         response = requests.get(url, headers=self.headers)
  95.         print(response.text)
  96.         info = re.findall(r'\((.+}?)\)', response.text)[0]
  97.         info = json.loads(info)
  98.         keys = info['tags']['tagClouds']
  99.         keys = [f"{key['tag']}({key['count']})" for key in keys]
  100.         keys = ','.join(keys)
  101.         return keys

  102.     def get_info(self, data):
  103.         title = data['raw_title']
  104.         city = data['item_loc']
  105.         price = data['view_price']
  106.         item_id = data['nid']
  107.         url = data['detail_url']
  108.         if item_id in self.shop_set:
  109.             print(title, '存在')
  110.             self.count += 1
  111.             return

  112.         user_id = data['user_id']

  113.         if 'tmall' in url or 'mclick' in url:
  114.             s_type = '天猫'
  115.             url = 'https://detail.tmall.com/item.htm?id={}'.format(item_id)
  116.         elif 'taobao' in url:
  117.             s_type = '淘宝'
  118.             url = 'http://item.taobao.com/item.htm?id={}'.format(item_id)

  119.         else:
  120.             s_type = '未知'

  121.         time.sleep(5)
  122.         x_url = 'https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?data=%7B%22itemNumId%22%3A%22{}%22%7D'.format(
  123.             item_id)
  124.         try:
  125.             x_data = requests.get(x_url, headers=self.headers).json()['data']
  126.         except:
  127.             return
  128.         try:
  129.             shopName = x_data['seller']['shopName']
  130.         except:
  131.             shopName = ''

  132.         try:
  133.             rank = x_data['seller']['creditLevel']
  134.             rank = self.rank_dict[rank]
  135.         except:
  136.             rank = '无'
  137.         try:
  138.             youhui_json = json.loads(x_data['apiStack'][0]['value'])
  139.         except:
  140.             youhui_json = {}
  141.         try:
  142.             month_xiao = youhui_json['item']['sellCount']
  143.         except:
  144.             month_xiao = ''

  145.         # 评价数量
  146.         try:
  147.             comment_num = x_data['rate']['totalCount']
  148.         except KeyError:
  149.             comment_num = ''

  150.         line = self.get_img_add_key(item_id, user_id, s_type)

  151.         if shopName == '':
  152.             print('闲鱼?')
  153.             return

  154.         # 店铺评分
  155.         shop_source = x_data['seller']['evaluates']
  156.         shop_source = [':'.join([source['title'], source['score']]) for source in shop_source]
  157.         shop_source = ','.join(shop_source)

  158.         item = [str(self.count), item_id + '\t', user_id + '\t', s_type, title, url, price, month_xiao, city, shopName, rank, comment_num, shop_source]
  159.         item += line
  160.         print(item)
  161.         self.ws.append(item)
  162.         self.wb.save(self.file_path)
  163.         self.count += 1
  164.         self.shop_set.add(item_id)

  165.     def search(self):
  166.         session = requests.session()
  167.         cookie = 't=85db5e7cb0133f23f29f98c7d6955615; cna=3uklFEhvXUoCAd9H6ovaVLTG; isg=BM3NGT0Oqmp6Mg4qfcGPnvDY3-pNqzF2joji8w9SGWTYBu241_taTS6UdFrF3Rk0; miid=983575671563913813; thw=cn; um=535523100CBE37C36EEFF761CFAC96BC4CD04CD48E6631C3112393F438E181DF6B34171FDA66B2C2CD43AD3E795C914C34A100CE538767508DAD6914FD9E61CE; _cc_=W5iHLLyFfA%3D%3D; tg=0; enc=oRI1V9aX5p%2BnPbULesXvnR%2BUwIh9CHIuErw0qljnmbKe0Ecu1Gxwa4C4%2FzONeGVH9StU4Isw64KTx9EHQEhI2g%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; mt=ci=0_0; hibext_instdsigdipv2=1; JSESSIONID=EC33B48CDDBA7F11577AA9FEB44F0DF3'

  168.         session.headers = {
  169.             'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E277 Safari/602.1',
  170.             'cookie': cookie,
  171.             'referer': 'https://s.taobao.com/search?q=%E5%86%B0%E7%AE%B1&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20190804&ie=utf8&sort=sale-desc&bcoffset=0&p4ppushleft=%2C48&s=1364'
  172.         }

  173.         url = 'https://s.taobao.com/search?rec_type=1&q={}&sort=sale-desc&s=0&ajax=true&data-value=396&filter=reserve_price%5B{}%2C{}%5D'.format(self.key, self.start_price, self.end_price)
  174.         start_flag = 0
  175.         while True:
  176.             if start_flag > 10:
  177.                 session.headers['cookie'] = 't=85db5e7cb0133f23f29f98c7d6955615; cna=3uklFEhvXUoCAd9H6ovaVLTG; isg=BM3NGT0Oqmp6Mg4qfcGPnvDY3-pNqzF2joji8w9SGWTYBu241_taTS6UdFrF3Rk0; miid=983575671563913813; thw=cn; um=535523100CBE37C36EEFF761CFAC96BC4CD04CD48E6631C3112393F438E181DF6B34171FDA66B2C2CD43AD3E795C914C34A100CE538767508DAD6914FD9E61CE; _cc_=W5iHLLyFfA%3D%3D; tg=0; enc=oRI1V9aX5p%2BnPbULesXvnR%2BUwIh9CHIuErw0qljnmbKe0Ecu1Gxwa4C4%2FzONeGVH9StU4Isw64KTx9EHQEhI2g%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; mt=ci=0_0; hibext_instdsigdipv2=1; JSESSIONID=EC33B48CDDBA7F11577AA9FEB44F0DF3'
  178.                 start_flag = 0
  179.             req = session.get(url).json()
  180.             try:
  181.                 capurl = req['url']
  182.                 print('验证码', capurl)
  183.                 time.sleep(1)
  184.                 # cookies = self.loop.run_until_complete(main(capurl))
  185.                 # print(cookies)
  186.                 # session.cookies.set('x5sec', cookies['x5sec'])
  187.                 start_flag += 1
  188.             except:
  189.                 break

  190.         page = jsonpath.jsonpath(req, '$..totalPage')[0]
  191.         datas = req['mods']['itemlist']['data']['auctions']
  192.         for data in datas:
  193.             self.get_info(data)

  194.         for p in range(1, page):
  195.             p_va = p * 44
  196.             url = 'https://s.taobao.com/search?rec_type=1&q={}&sort=sale-desc&s={}&ajax=true&data-value=396&filter=reserve_price%5B{}%2C{}%5D'.format(self.key, p_va, self.start_price, self.end_price)
  197.             print(url)
  198.             flag = 0
  199.             while True:
  200.                 if flag > 10:
  201.                     session.headers['cookie'] = 't=85db5e7cb0133f23f29f98c7d6955615; cna=3uklFEhvXUoCAd9H6ovaVLTG; isg=BM3NGT0Oqmp6Mg4qfcGPnvDY3-pNqzF2joji8w9SGWTYBu241_taTS6UdFrF3Rk0; miid=983575671563913813; thw=cn; um=535523100CBE37C36EEFF761CFAC96BC4CD04CD48E6631C3112393F438E181DF6B34171FDA66B2C2CD43AD3E795C914C34A100CE538767508DAD6914FD9E61CE; _cc_=W5iHLLyFfA%3D%3D; tg=0; enc=oRI1V9aX5p%2BnPbULesXvnR%2BUwIh9CHIuErw0qljnmbKe0Ecu1Gxwa4C4%2FzONeGVH9StU4Isw64KTx9EHQEhI2g%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; mt=ci=0_0; hibext_instdsigdipv2=1; JSESSIONID=EC33B48CDDBA7F11577AA9FEB44F0DF3'

  202.                     flag = 0
  203.                 req = session.get(url).json()
  204.                 try:
  205.                     capurl = req['url']
  206.                     print('验证码', capurl)
  207.                     # cookies = self.loop.run_until_complete(main(capurl))
  208.                     # print(cookies)
  209.                     # session.cookies.set('x5sec', cookies['x5sec'])
  210.                     time.sleep(1)
  211.                     flag += 1
  212.                 except:
  213.                     break

  214.             datas = req['mods']['itemlist']['data']['auctions']
  215.             for data in datas:
  216.                 self.get_info(data)


  217. if __name__ == '__main__':
  218.     tb = TaoBaoSpider(good, low_price, high_price)
  219.     tb.search()
复制代码


搬运来自【鱼c论坛作品展示区】

如果您对我的答案感到满意,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-16 14:48:09 | 显示全部楼层
我也想知道.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-16 15:01:17 | 显示全部楼层
用手
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-16 15:21:46 | 显示全部楼层

噗...
真·有手就行
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-16 15:50:59 | 显示全部楼层
yhhpf 发表于 2020-7-16 15:21
噗...
真·有手就行

crtl + c  然后打开excle   ctrl + v
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-16 17:36:34 | 显示全部楼层
老哥我昨天开始学,等我学会了我来告诉你
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-21 16:54:18 | 显示全部楼层
淘宝连接了好多外部文件呢,是最难爬的一个,具体我也不会
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-21 21:34:32 | 显示全部楼层

真的用手就行的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-23 07:53:45 | 显示全部楼层
我是用selenium爬取的这里有个github链接你可以参考一下,要是觉得有点难度我可以给你推荐一个视频如果有需要可以联系我
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-23 13:40:59 | 显示全部楼层
  1. import re
  2. import os
  3. import json
  4. import time
  5. import requests
  6. import jsonpath
  7. from openpyxl import Workbook, load_workbook

  8. print('欢迎使用淘宝查询助理')
  9. print('本程序旨在帮助您更容易挑选到您所需要的商品')
  10. good = input('请输入要查询的商品名称:')
  11. low_price = int(input('请输入您所能接受的商品最低价格:'))
  12. high_price = int(input('请输入您所能接受的商品最高价格:'))
  13. print('请稍等片刻,数据正在获取中')
  14. print('{0}.xlsx正在创建中,您可以在本程序同目录下找到'.format(good))
  15. print('请等待程序关闭后再打开表格,谢谢配合!')
  16. print('祝您购物愉快!\n')
  17. print('-------------------------------------------------------------------')
  18. class TaoBaoSpider(object):
  19.     """淘宝爬虫"""
  20.     def __init__(self, key, start_price, end_price):

  21.         self.headers = {
  22.             'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30'
  23.                           ' (KHTML, like Gecko) Version/10.0 Mobile/14E277 Safari/602.1',
  24.         }
  25.         self.start_price = start_price
  26.         self.end_price = end_price
  27.         self.count = 1
  28.         self.rank_dict = {
  29.             '0': '无',
  30.             '1': '1心',
  31.             '2': '2心',
  32.             '3': '3心',
  33.             '4': '4心',
  34.             '5': '5心',
  35.             '6': '1钻',
  36.             '7': '2钻',
  37.             '8': '3钻',
  38.             '9': '4钻',
  39.             '10': '5钻',
  40.             '11': '1蓝冠',
  41.             '12': '2蓝冠',
  42.             '13': '3蓝冠',
  43.             '14': '4蓝冠',
  44.             '15': '5蓝冠',
  45.             '16': '1金冠',
  46.             '17': '2金冠',
  47.             '18': '3金冠',
  48.             '19': '4金冠',
  49.             '20': '5金冠'
  50.         }
  51.         self.key = key
  52.         self.file_path = f'{self.key}.xlsx'
  53.         self.shop_set = set()
  54.         if os.path.exists(self.file_path):
  55.             self.wb = load_workbook(self.file_path)
  56.             self.ws = self.wb.active
  57.             max_row = self.ws.max_row
  58.             for row in range(2, max_row + 1):
  59.                 value = self.ws.cell(row=row, column=2).value.strip()
  60.                 self.shop_set.add(value)

  61.         else:
  62.             self.wb = Workbook()
  63.             self.ws = self.wb.active
  64.             self.ws.append(['序号', '商品ID', '店铺ID', '商城类型', '标题', '链接', '价格', '月销', '地区', '店铺名称',
  65.                             '店铺等级', '评论总数', '店铺评分', '相关描述', '图片评论', '追加评论', '好评', '中评', '差评', '与描述相符'])

  66.     def get_img_add_key(self, item_id, user_id, s_type):

  67.         url = f'https://rate.taobao.com/detailCommon.htm?auctionNumId={item_id}&userNumId={user_id}'

  68.         headers = self.headers
  69.         headers['Referer'] = f'https://item.taobao.com/item.htm?id={item_id}'

  70.         response = requests.get(url, headers=headers)
  71.         info = re.findall('\((.+}?)\)', response.text)[0]
  72.         info = json.loads(info)
  73.         data = info['data']
  74.         keys = data['impress']
  75.         keys = [f"{key['title']}({key['count']})" for key in keys]
  76.         keys = ','.join(keys)
  77.         if s_type == '淘宝':
  78.             add_comment = data['count']['additional']
  79.             img_comment = data['count']['pic']
  80.             god_comment = data['count']['good']
  81.             mid_comment = data['count']['normal']
  82.             bad_comment = data['count']['bad']
  83.         else:
  84.             add_comment = data['count']['additional']
  85.             img_comment = data['count']['pic']
  86.             god_comment = data['count']['good']
  87.             mid_comment = data['count']['normal']
  88.             bad_comment = data['count']['bad']

  89.         correspond = data['correspond']

  90.         line = [keys, add_comment, img_comment, god_comment, mid_comment, bad_comment, correspond]
  91.         return line

  92.     def get_comment_key(self, item_id):
  93.         url = f'https://rate.tmall.com/listTagClouds.htm?itemId={item_id}'

  94.         response = requests.get(url, headers=self.headers)
  95.         print(response.text)
  96.         info = re.findall(r'\((.+}?)\)', response.text)[0]
  97.         info = json.loads(info)
  98.         keys = info['tags']['tagClouds']
  99.         keys = [f"{key['tag']}({key['count']})" for key in keys]
  100.         keys = ','.join(keys)
  101.         return keys

  102.     def get_info(self, data):
  103.         title = data['raw_title']
  104.         city = data['item_loc']
  105.         price = data['view_price']
  106.         item_id = data['nid']
  107.         url = data['detail_url']
  108.         if item_id in self.shop_set:
  109.             print(title, '存在')
  110.             self.count += 1
  111.             return

  112.         user_id = data['user_id']

  113.         if 'tmall' in url or 'mclick' in url:
  114.             s_type = '天猫'
  115.             url = 'https://detail.tmall.com/item.htm?id={}'.format(item_id)
  116.         elif 'taobao' in url:
  117.             s_type = '淘宝'
  118.             url = 'http://item.taobao.com/item.htm?id={}'.format(item_id)

  119.         else:
  120.             s_type = '未知'

  121.         time.sleep(5)
  122.         x_url = 'https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?data=%7B%22itemNumId%22%3A%22{}%22%7D'.format(
  123.             item_id)
  124.         try:
  125.             x_data = requests.get(x_url, headers=self.headers).json()['data']
  126.         except:
  127.             return
  128.         try:
  129.             shopName = x_data['seller']['shopName']
  130.         except:
  131.             shopName = ''

  132.         try:
  133.             rank = x_data['seller']['creditLevel']
  134.             rank = self.rank_dict[rank]
  135.         except:
  136.             rank = '无'
  137.         try:
  138.             youhui_json = json.loads(x_data['apiStack'][0]['value'])
  139.         except:
  140.             youhui_json = {}
  141.         try:
  142.             month_xiao = youhui_json['item']['sellCount']
  143.         except:
  144.             month_xiao = ''

  145.         # 评价数量
  146.         try:
  147.             comment_num = x_data['rate']['totalCount']
  148.         except KeyError:
  149.             comment_num = ''

  150.         line = self.get_img_add_key(item_id, user_id, s_type)

  151.         if shopName == '':
  152.             print('闲鱼?')
  153.             return

  154.         # 店铺评分
  155.         shop_source = x_data['seller']['evaluates']
  156.         shop_source = [':'.join([source['title'], source['score']]) for source in shop_source]
  157.         shop_source = ','.join(shop_source)

  158.         item = [str(self.count), item_id + '\t', user_id + '\t', s_type, title, url, price, month_xiao, city, shopName, rank, comment_num, shop_source]
  159.         item += line
  160.         print(item)
  161.         self.ws.append(item)
  162.         self.wb.save(self.file_path)
  163.         self.count += 1
  164.         self.shop_set.add(item_id)

  165.     def search(self):
  166.         session = requests.session()
  167.         cookie = 't=85db5e7cb0133f23f29f98c7d6955615; cna=3uklFEhvXUoCAd9H6ovaVLTG; isg=BM3NGT0Oqmp6Mg4qfcGPnvDY3-pNqzF2joji8w9SGWTYBu241_taTS6UdFrF3Rk0; miid=983575671563913813; thw=cn; um=535523100CBE37C36EEFF761CFAC96BC4CD04CD48E6631C3112393F438E181DF6B34171FDA66B2C2CD43AD3E795C914C34A100CE538767508DAD6914FD9E61CE; _cc_=W5iHLLyFfA%3D%3D; tg=0; enc=oRI1V9aX5p%2BnPbULesXvnR%2BUwIh9CHIuErw0qljnmbKe0Ecu1Gxwa4C4%2FzONeGVH9StU4Isw64KTx9EHQEhI2g%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; mt=ci=0_0; hibext_instdsigdipv2=1; JSESSIONID=EC33B48CDDBA7F11577AA9FEB44F0DF3'

  168.         session.headers = {
  169.             'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E277 Safari/602.1',
  170.             'cookie': cookie,
  171.             'referer': 'https://s.taobao.com/search?q=%E5%86%B0%E7%AE%B1&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20190804&ie=utf8&sort=sale-desc&bcoffset=0&p4ppushleft=%2C48&s=1364'
  172.         }

  173.         url = 'https://s.taobao.com/search?rec_type=1&q={}&sort=sale-desc&s=0&ajax=true&data-value=396&filter=reserve_price%5B{}%2C{}%5D'.format(self.key, self.start_price, self.end_price)
  174.         start_flag = 0
  175.         while True:
  176.             if start_flag > 10:
  177.                 session.headers['cookie'] = 't=85db5e7cb0133f23f29f98c7d6955615; cna=3uklFEhvXUoCAd9H6ovaVLTG; isg=BM3NGT0Oqmp6Mg4qfcGPnvDY3-pNqzF2joji8w9SGWTYBu241_taTS6UdFrF3Rk0; miid=983575671563913813; thw=cn; um=535523100CBE37C36EEFF761CFAC96BC4CD04CD48E6631C3112393F438E181DF6B34171FDA66B2C2CD43AD3E795C914C34A100CE538767508DAD6914FD9E61CE; _cc_=W5iHLLyFfA%3D%3D; tg=0; enc=oRI1V9aX5p%2BnPbULesXvnR%2BUwIh9CHIuErw0qljnmbKe0Ecu1Gxwa4C4%2FzONeGVH9StU4Isw64KTx9EHQEhI2g%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; mt=ci=0_0; hibext_instdsigdipv2=1; JSESSIONID=EC33B48CDDBA7F11577AA9FEB44F0DF3'
  178.                 start_flag = 0
  179.             req = session.get(url).json()
  180.             try:
  181.                 capurl = req['url']
  182.                 print('验证码', capurl)
  183.                 time.sleep(1)
  184.                 # cookies = self.loop.run_until_complete(main(capurl))
  185.                 # print(cookies)
  186.                 # session.cookies.set('x5sec', cookies['x5sec'])
  187.                 start_flag += 1
  188.             except:
  189.                 break

  190.         page = jsonpath.jsonpath(req, '$..totalPage')[0]
  191.         datas = req['mods']['itemlist']['data']['auctions']
  192.         for data in datas:
  193.             self.get_info(data)

  194.         for p in range(1, page):
  195.             p_va = p * 44
  196.             url = 'https://s.taobao.com/search?rec_type=1&q={}&sort=sale-desc&s={}&ajax=true&data-value=396&filter=reserve_price%5B{}%2C{}%5D'.format(self.key, p_va, self.start_price, self.end_price)
  197.             print(url)
  198.             flag = 0
  199.             while True:
  200.                 if flag > 10:
  201.                     session.headers['cookie'] = 't=85db5e7cb0133f23f29f98c7d6955615; cna=3uklFEhvXUoCAd9H6ovaVLTG; isg=BM3NGT0Oqmp6Mg4qfcGPnvDY3-pNqzF2joji8w9SGWTYBu241_taTS6UdFrF3Rk0; miid=983575671563913813; thw=cn; um=535523100CBE37C36EEFF761CFAC96BC4CD04CD48E6631C3112393F438E181DF6B34171FDA66B2C2CD43AD3E795C914C34A100CE538767508DAD6914FD9E61CE; _cc_=W5iHLLyFfA%3D%3D; tg=0; enc=oRI1V9aX5p%2BnPbULesXvnR%2BUwIh9CHIuErw0qljnmbKe0Ecu1Gxwa4C4%2FzONeGVH9StU4Isw64KTx9EHQEhI2g%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; mt=ci=0_0; hibext_instdsigdipv2=1; JSESSIONID=EC33B48CDDBA7F11577AA9FEB44F0DF3'

  202.                     flag = 0
  203.                 req = session.get(url).json()
  204.                 try:
  205.                     capurl = req['url']
  206.                     print('验证码', capurl)
  207.                     # cookies = self.loop.run_until_complete(main(capurl))
  208.                     # print(cookies)
  209.                     # session.cookies.set('x5sec', cookies['x5sec'])
  210.                     time.sleep(1)
  211.                     flag += 1
  212.                 except:
  213.                     break

  214.             datas = req['mods']['itemlist']['data']['auctions']
  215.             for data in datas:
  216.                 self.get_info(data)


  217. if __name__ == '__main__':
  218.     tb = TaoBaoSpider(good, low_price, high_price)
  219.     tb.search()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-23 13:42:30 | 显示全部楼层
和楼上的一个网址的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-23 22:52:34 | 显示全部楼层
nahongyan1997 发表于 2020-7-23 10:21
我们不创造代码,我们只是代码的搬运工。
淘宝商品信息爬虫:

搬代码的希望能附上原作者的连接 谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-23 22:53:37 | 显示全部楼层

最佳 给楼上了  但是也谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-23 23:05:26 | 显示全部楼层
温木zou 发表于 2020-7-23 22:53
最佳 给楼上了  但是也谢谢了

主要是我下载代码的时候没想到能用上,没记链接。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-24 08:42:33 | 显示全部楼层
在鱼C论坛上找到的,搜索帖子输入“淘宝”就行
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-24 08:44:01 | 显示全部楼层
作者链接:ab1696109084
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-25 09:10:29 | 显示全部楼层
嘉岳呀 发表于 2020-7-24 08:44
作者链接:ab1696109084

好的 谢谢啦
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-24 04:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表