我有一个函数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
输出中选择仅一个?
由于
答案 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)