2016-09-22 15 views
-1

Я пытаюсь извлечь запросы пользователей из url. Я пытаюсь найти ответ, но я только нахожу, как разбирать строку. Но у меня есть проблема, что я должен идентифицировать много URL-адресов с запросом, и когда я пытаюсь получить строку с атрибутом, атрибуты с текстом отличаются. Я имею в виду, когда я пытаюсьPython: извлечение текстового запроса с url

pat = re.compile(r"\?\w+=(.*)") 
search = ['yandex.ru/search', 'youtube.com/results', 'google.com/search', 'google.ru/search', 'go.mail.ru/search', 'search.yahoo.com/search', 'market.yandex.ru/search', 'bing.com/search'] 
for i in urls: 
    u = re.findall(pat, i) 
    if any(ext in i for ext in search): 
     if len(u) > 0: 
      str = urllib.unquote(u[0]) 
      print str 
      print {k: [s for s in v] for k, v in parse_qs(str).items()} 

И это выглядит как

chromesearch&clid=2196598&text=королевы крика смотреть онлайн&lr=213&redircnt=1467230336.1 
{'text': ['\xd0\xba\xd0\xbe\xd1\x80\xd0\xbe\xd0\xbb\xd0\xb5\xd0\xb2\xd1\x8b \xd0\xba\xd1\x80\xd0\xb8\xd0\xba\xd0\xb0 \xd1\x81\xd0\xbc\xd0\xbe\xd1\x82\xd1\x80\xd0\xb5\xd1\x82\xd1\x8c \xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd'], 'clid': ['2196598'], 'lr': ['213'], 'redircnt': ['1467230336.1']} 
минималистичный+стиль&newwindow=1&biw=1280&bih=909&source=lnms&tbm=isch&sa=X&ved=0ahUKEwikhI2M_s3NAhXBBiwKHfbEBEEQ_AUIBigB#imgrc=Er7qLiHoEGPIGM: 
{'bih': ['909'], 'newwindow': ['1'], 'source': ['lnms'], 'ved': ['0ahUKEwikhI2M_s3NAhXBBiwKHfbEBEEQ_AUIBigB#imgrc=Er7qLiHoEGPIGM:'], 'tbm': ['isch'], 'biw': ['1280'], 'sa': ['X']} 
минималистичный+стиль&newwindow=1&biw=1280&bih=909&source=lnms&tbm=isch&sa=X&ved=0ahUKEwikhI2M_s3NAhXBBiwKHfbEBEEQ_AUIBigB#imgrc=Er7qLiHoEGPIGM: 
{'bih': ['909'], 'newwindow': ['1'], 'source': ['lnms'], 'ved': ['0ahUKEwikhI2M_s3NAhXBBiwKHfbEBEEQ_AUIBigB#imgrc=Er7qLiHoEGPIGM:'], 'tbm': ['isch'], 'biw': ['1280'], 'sa': ['X']} 
rjulf+ddjlbim+ytdthysq+gby+rjl+d+,fyrjvfn&ie=utf-8&oe=utf-8&gws_rd=cr&ei=ezZ0V-7iOoab6ASvlJe4Dg 
{'ie': ['utf-8'], 'oe': ['utf-8'], 'gws_rd': ['cr'], 'ei': ['ezZ0V-7iOoab6ASvlJe4Dg']} 
маскаи гейла&lr=10750&clid=1985551-210&win=213 
{'win': ['213'], 'clid': ['1985551-210'], 'lr': ['10750']} 
1&q=как+выбрать+смартфон 
{'q': ['\xd0\xba\xd0\xb0\xd0\xba \xd0\xb2\xd1\x8b\xd0\xb1\xd1\x80\xd0\xb0\xd1\x82\xd1\x8c \xd1\x81\xd0\xbc\xd0\xb0\xd1\x80\xd1\x82\xd1\x84\xd0\xbe\xd0\xbd']} 
Jade+Jantzen&ie=utf-8&oe=utf-8&gws_rd=cr&ei=FQB0V9WbIoahsAH5zZGACg 
{'ie': ['utf-8'], 'oe': ['utf-8'], 'gws_rd': ['cr'], 'ei': ['FQB0V9WbIoahsAH5zZGACg']} 

Есть ли способ получить только текст всех строк?

ответ

0

Вы можете получить доступ к тексту, используя поиск по словарю, чтобы получить список, а затем получить доступ к первому элементу списка:

d = {'text': ['\xd0\xba\xd0\xbe\xd1\x80\xd0\xbe\xd0\xbb\xd0\xb5\xd0\xb2\xd1\x8b \xd0\xba\xd1\x80\xd0\xb8\xd0\xba\xd0\xb0 \xd1\x81\xd0\xbc\xd0\xbe\xd1\x82\xd1\x80\xd0\xb5\xd1\x82\xd1\x8c \xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd'], 'clid': ['2196598'], 'lr': ['213'], 'redircnt': ['1467230336.1']} 
text = d['text'][0] 

>>> print text 
королевы крика смотреть онлайн 

Или вы можете получить его прямо из parse_qs результата:

>>> print urlparse.parse_qs(s)['text'][0] 
королевы крика смотреть онлайн 

чтобы применить это к вашему коду, так что он будет работать для всех значений:

print {k: v[0] for k, v in parse_qs(str).items()} 

, то есть взять первый элемент каждого списка значений.


Если вы хотите печатать словари и имеют строки появляются в соответствующем представлении, то есть не как произведены предста, вы можете использовать json модуль сваливать словарь объектов в виде строк, а затем распечатать их :

import json 

d = {'text': ['\xd0\xba\xd0\xbe\xd1\x80\xd0\xbe\xd0\xbb\xd0\xb5\xd0\xb2\xd1\x8b \xd0\xba\xd1\x80\xd0\xb8\xd0\xba\xd0\xb0 \xd1\x81\xd0\xbc\xd0\xbe\xd1\x82\xd1\x80\xd0\xb5\xd1\x82\xd1\x8c \xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd'], 'clid': ['2196598'], 'lr': ['213'], 'redircnt': ['1467230336.1']} 
s = json.dumps(d, ensure_ascii=False) 

>>> print s 
{"text": ["королевы крика смотреть онлайн"], "clid": ["2196598"], "lr": ["213"], "redircnt": ["1467230336.1"]} 
+0

Okey, но как я могу извлечь текст запросов оттуда? –

+0

@PetrPetrov: Я неправильно понял ваш вопрос. Доступ к тексту - простой поиск словаря. – mhawke

+0

Я написал свою проблему в вопросе. Можете ли вы посмотреть на строки с атрибутом? В некотором текстовом тексте в атрибуте 'text', некоторые из атрибута' q', но некоторые не содержат атрибута ('маскаи гейла & lr = 10750 & clid = 1985551-210 & win = 213 {'win': ['213'], ' clid ': [' 1985551-210 '],' lr ': [' 10750 ']} '). И я хочу получить текст из всех строк. –

Смежные вопросы