Красивый вопрос о супе - PullRequest
       5

Красивый вопрос о супе

0 голосов
/ 16 апреля 2011

Недавно я рекомендовал Beautiful Soup для проекта на python.Я читал документы на красивой странице супа, но не могу понять, что я хочу сделать.У меня есть страница с целой кучей ссылок.Это каталог со ссылками, размером файла и т. Д. Допустим, это выглядит следующим образом:

<code>
Parent Directory/       -   Directory
game1.tar.gz    2010-May-24 06:51:39    8.2K    application/octet-stream
game2.tar.gz    2010-Jun-19 09:09:34    542.4K  application/octet-stream
game3.tar.gz    2011-Nov-13 11:53:01    5.5M    application/octet-stream
Итак, я хочу предоставить строку поиска, скажем game2, и я хочу, чтобы она загрузила game2.tar.gz.У меня была идея использовать RE, но я слышал, что Beautiful Soup намного лучше.Кто-нибудь может показать и объяснить, как я это сделаю?

Ответы [ 3 ]

1 голос
/ 16 апреля 2011
from BeautifulSoup import BeautifulSoup  
import urllib2

def searchLinks(url, query_string):
    f = urllib2.urlopen(url)
    soup = BeautifulSoup(f, convertEntities='html')
    for a in soup.findAll('a'):
        if a.has_key('href'):
            idx = a.contents[0].find(query_string)
            if idx is not None and idx > -1:
                yield a['href'] 

res = list(searchLinks('http://example.com', 'game2'))
print res
0 голосов
/ 23 января 2017

На YouTube есть несколько видеороликов об установке и использовании Beautiful Soup 4 для "чистки".Они довольно подробны.Я все еще медленно их прохожу, но первая заставила меня установить и запустить.
Поиск "Beautiful Soup" на YouTube.

0 голосов
/ 16 апреля 2011

Ваш вопрос не очень ясен.

На основании представленных вами данных я думаю, что вам нужно всего лишь:

content = '''Parent Directory/       -   Directory
game1.tar.gz    2010-May-24 06:51:39    8.2K    application/octet-stream
game2.tar.gz    2010-Jun-19 09:09:34    542.4K  application/octet-stream
game3.tar.gz    2011-Nov-13 11:53:01    5.5M    application/octet-stream'''


def what_dir(x, content):
    for line in content.splitlines():
        if x in line.split(None,1)[0]:
            return line.split(None,1)[0]

.

РЕДАКТИРОВАТЬ

Помогает ли это вам?:

import urllib
import re

sock = urllib.urlopen('http://pastie.org/pastes/1801547/reply')
content = sock.read()
sock.close()

spa = re.search('<textarea class="pastebox".+?</textarea>',content,re.DOTALL).span()

regx = re.compile('href=&quot;(.+?)&quot;&gt;\\1&lt;')

print regx.findall(content,*spa)

РЕДАКТИРОВАТЬ 2

Или это то, что вы хотите?:

import urllib
import re

sock = urllib.urlopen('http://pastie.org/pastes/1801547/reply')
content = sock.read()
sock.close()

spa = re.search('<textarea class="pastebox".+?</textarea>',content,re.DOTALL).span()
regx = re.compile('href=&quot;(.+?)&quot;&gt;\\1&lt;')
dic = dict((name.split('.')[0],'http://pastie.org/pastes/1801547/'+name)
           for name in regx.findall(content,*spa))
print dic

результат

{'game3': 'http://pastie.org/pastes/1801547/game3.tar.gz',
 'game2': 'http://pastie.org/pastes/1801547/game2.tar.gz',
 'game1': 'http://pastie.org/pastes/1801547/game1.tar.gz'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...