鱼C论坛

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

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

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

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

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

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

def get_html(url):
    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"
    ips = [
'222.161.56.166',
'122.238.12.191',
'61.191.41.130'
        ]
    ip = random.choice(ips)
    p = u.ProxyHandler({'http':ip})
    opener = u.build_opener(p)
    u.install_opener(opener)

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

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

key = u.quote(name)

os.mkdir(name)
os.chdir(name)
   
def main():
    for j in range(num):
        url = 'https://s.taobao.com/search?q=' + key + '&s='+ str(j*44)
        html = get_html(url).text
        s = re.findall(r'"pic_url":"([^"]+?)".+?"view_price":"([^"]+?)".+?"view_sales":"([^"]+?)"',html)
        
        os.mkdir('%s%d'%(name,j+1))
        os.chdir('%s%d'%(name,j+1))
        
        for i in s:
            img = get_html(url=('http:' + i[0]))
            
            with open('%s元_%s.jpg'%(i[1],i[2]),'wb') as f:
                f.write(img.content)
   
        os.chdir(os.pardir)
        
if __name__ == '__main__':
    main()

 
  



TS}`GJYXP3L820R2$51Z.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-3 21:12:10 From FishC Mobile | 显示全部楼层
数据应该是以json文件传输的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-30 17:29:21 | 显示全部楼层
在网页源代码的第四个script语句的第一段json中,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

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

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

if __name__ == "__main__":
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好吧,但是和实际搜到的不一样,输入电脑能把鞋子给拿出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

商品id就是我的代码中第一个json数据的键名category
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 02:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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