仅选择(1)从100多个项目的mysql数据库输出中随机选择

时间:2017-02-03 19:52:49

标签: python mysql python-3.x

我有一个函数get_user_agent,它从mysql数据库返回几百行。这些近100多个结果中的一部分看起来像:

每个用户代理的输出看起来像(只有100个条目,这只是一个):

从MYSQL QUERY更新输出

[(('Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/418.9.1 (KHTML, like Gecko) Safari/419.3 TeaShark/0.8',), ('Mozilla/5.0 (Nintendo WiiU) AppleWebKit/534.52 (KHTML, like Gecko) NX/2.1.0.8.21 NintendoBrowser/1.0.0.7494.US',))]

我成功地从数据库中提取了所有用户代理,但我只想从那里选择 1 来使用。

我目前正在使用: user_agent = str(random.choice(self.valid_user_agents)

但是这会选择整个查询结果 1 ,当我真的只想要一个用户代理而不是它有100个或更多的数据库结果时作为var user_agent的值。

如何从user_agent输出中选择仅一个

由于

2 个答案:

答案 0 :(得分:1)

我认为你对valid_user_agents

的结构感到困惑
[                                     # A list
    (                                 # containing just a tuple
        ('Mozilla/5.0 (Mac...',),     # of tuples of 1 string
        ('Mozilla/5.0 (Nin...',),
        ...      
    )
]

所以

  • valid_user_agents - >整个结构
  • valid_user_agents[0] - >内(大)元组
  • valid_user_agents[0][0] - >包含第一个用户代理的元组
  • valid_user_agents[0][0][0] - >第一个用户代理为字符串

暂时忘记random并考虑如何选择第一个用户代理(作为字符串)

valid_user_agents[0][0][0]

和第二个

valid_user_agents[0][1][0]

和第n个

valid_user_agents[0][n][0]

我看到三种解决方案:

选择随机整数

从时间间隔i中选择一个随机整数[0, len(valid_user_agents[0]))并访问valid_user_agents[0][i][0](请注意,左边是封闭的间隔,右边是打开的,这意味着可能的最低值是0,最高的是valid_user_agents[0]的长度 - 又名"大的内部元组" - 减1)。最小例子:

import random
i = random.randint(0, len(valid_user_agents[0]) - 1)
# NOTE: i is a random discrete variable whose sampling space is the
# set {0, 1, 2, ..., length of the big inner tuple - 1}
# meaning it's a valid index for that inner big tuple

user_agent = valid_user_agents[0][i][0] 

展平您的数据结构

对您的数据结构进行一些操作,以便仅在第一级['Mozilla...', 'Mozilla...', ...]中获取您感兴趣的内容。最小例子:

valid_user_agents = [ua[0] for ua in valid_user_agents[0]]
user_agent = random.choice(valid_user_agents)

如果可能,请更改sql_query

这只是基于一个假设。

SELECT * FROM倾向于将行作为元组提供,即使行中只有一个元素。相反,SELECT column_name FROM会返回一个深度较小的数据结构。

答案 1 :(得分:0)

我们可以得到你的用户代理数组的结构,看起来你是在一个错误的数组或元组深度上随机运行

import random

data=(('Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; NOKIA; Lumia 735) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Mobile Safari/537.36 Edge/12.0',),('Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/418.9.1 (KHTML, like Gecko) Safari/419.3 TeaShark/0.8'),('Mozilla/5.0 (iPad; CPU OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10A523 [FBAN/FBIOS;FBAV/6.0.1;FBBV/180945;FBDV/iPad2,1;FBMD/iPad;FBSN/iPhone OS;FBSV/6.0.1;FBSS/1; FBCR/;FBID/tablet;FBLC/en_US;FBOP/1]'),)

user_agent = str(random.choice(data))

print(user_agent)

Execution