鱼C论坛

 找回密码
 立即注册
查看: 900|回复: 7

淘宝防爬已经升级了,我找不到数据藏在哪

[复制链接]
发表于 2018-8-3 18:38:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是之前写的代码,以前正常,现在反馈给我不想要的东西
  1. import requests
  2. import random
  3. import re
  4. import os
  5. import urllib.request as u

  6. def get_html(url):
  7.     user = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"
  8.     ips = [
  9. '222.161.56.166',
  10. '122.238.12.191',
  11. '61.191.41.130'
  12.         ]
  13.     ip = random.choice(ips)
  14.     p = u.ProxyHandler({'http':ip})
  15.     opener = u.build_opener(p)
  16.     u.install_opener(opener)

  17.     rep = requests.get(url,headers={'User-Agent':user})
  18.     return rep

  19. name = input('请输入要查找的商品:')
  20. num = int(input('请输入页数:'))

  21. key = u.quote(name)

  22. os.mkdir(name)
  23. os.chdir(name)
  24.    
  25. def main():
  26.     for j in range(num):
  27.         url = 'https://s.taobao.com/search?q=' + key + '&s='+ str(j*44)
  28.         html = get_html(url).text
  29.         s = re.findall(r'"pic_url":"([^"]+?)".+?"view_price":"([^"]+?)".+?"view_sales":"([^"]+?)"',html)
  30.         
  31.         os.mkdir('%s%d'%(name,j+1))
  32.         os.chdir('%s%d'%(name,j+1))
  33.         
  34.         for i in s:
  35.             img = get_html(url=('http:' + i[0]))
  36.             
  37.             with open('%s元_%s.jpg'%(i[1],i[2]),'wb') as f:
  38.                 f.write(img.content)
  39.    
  40.         os.chdir(os.pardir)
  41.         
  42. if __name__ == '__main__':
  43.     main()


  44.   

复制代码




TS}`GJYXP3L820R2$51Z.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-3 21:12:10 From FishC Mobile | 显示全部楼层
数据应该是以json文件传输的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-30 17:29:21 | 显示全部楼层
在网页源代码的第四个script语句的第一段json中,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-2 10:42:13 | 显示全部楼层
那个大字典已经被改了,不信输入python看看,本来全是书籍,结果还给T恤什么的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-2 17:00:45 | 显示全部楼层
你在后面加个书籍就行啦
  1. import requests
  2. import re
  3. import json
  4. import pandas
  5. # 打开网页函数
  6. def get_response(url):
  7.     headers = {
  8.         'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36"}
  9.     response = requests.get(url, headers) # 加上浏览器头,以防被禁
  10.     response.encoding = 'utf-8'      # 指定编码格式
  11.     #response.encoding = 'gbk'      # 指定编码格式
  12.     return response

  13. def main():
  14.     base_url = 'https://s.taobao.com/search?q=python书籍'
  15.     response = get_response(base_url)
  16.     req = 'g_page_config = (.*?)g_srp_loadCss'
  17.     items_list = re.findall(req,response.text,re.S)[0].strip()

  18.     js = json.loads(items_list[:-1])
  19.     jd = js['mods']['itemlist']['data']['auctions'] #.keys())
  20.     df = pandas.DataFrame(jd)
  21.     # 在下面逐一输入键名进行观察需要的数据。用浏览器打开当前文件,进行筛选
  22.     df[['category','raw_title','view_price','item_loc','view_sales']].to_html('test_data.html')

  23. if __name__ == "__main__":
  24.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-2 18:32:46 | 显示全部楼层
wongyusing 发表于 2018-9-2 17:00
你在后面加个书籍就行啦

好吧,但是和实际搜到的不一样,输入电脑能把鞋子给拿出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-2 18:42:48 | 显示全部楼层
幽梦三影 发表于 2018-9-2 18:32
好吧,但是和实际搜到的不一样,输入电脑能把鞋子给拿出来

这是淘宝的反爬机制,让你爬,但爬不到干净的数据。
数据不干净是因为你的请求头太少参数了。  
你使用浏览器正常打开淘宝并搜索商品可以发现url很长。这里面有很多个参数。  
填写正确就行了。  
如果不填写上面的参数,可以利用json数据中的一个商品id进行筛选。  
给个最佳吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-2 18:45:30 | 显示全部楼层
本帖最后由 wongyusing 于 2018-9-2 18:47 编辑

商品id就是我的代码中第一个json数据的键名category
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-7 11:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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