захват подстроки во время очистки с помощью Python2.6 - PullRequest
0 голосов
/ 17 мая 2010

Эй, может кто-нибудь помочь со следующим?

Я пытаюсь почистить сайт, на котором есть следующая информация. Мне нужно просто нажать номер после тега </strong>

[<li><strong>ISBN-13:</strong> 9780375853401</li>, <li><strong>Pub. Date: </strong> 05/11/2010</li>]
[<li><strong>UPC:</strong> 490355000372</li>, <li><strong>Catalog No:</strong> 15024/25</li>, <li><strong>Label:</strong> CAMERATA</li>]

вот фрагмент кода, который я использовал для получения вышеуказанных данных с использованием mechanize и BeautifulSoup. Я застрял здесь, поскольку он не позволяет мне использовать функцию find () для списка

br_results = mechanize.urlopen(br_results)
html = br_results.read()
soup = BeautifulSoup(html)
local_links = soup.findAll("a", {"class" : "down-arrow csa"})
upc_code = soup.findAll("ul", {"class" : "bc-meta3"})
for upc in upc_code:
    upc_text = upc.contents.contents
    print upc_text

1 Ответ

2 голосов
/ 17 мая 2010

Я представляю upc_code - это список, который вы нам показываете, а local_links не имеет ничего общего с вашим вопросом, верно? Учитывая, что вы больше не упоминаете об этом в своем коде ...?

Так что я не уверен, что upc_text будет в теле вашего цикла, учитывая, что upc является ul Tag - upc.contents будет списком li тегов (предположительно ), и я не понимаю, как upc.contents.contents может работать - что вы видите в результате этого кода? Я бы ожидал исключения!

В любом случае, способ, которым я бы написал цикл, был бы примерно таким:

for upc in upc_code:
    listitems = upc.findAll('li')
    for anitem in listitems:
        print anitem.contents[1]

, поскольку вы, похоже, хотите, чтобы второй дочерний элемент каждого элемента списка (первый - это тег strong, второй - требуемая навигационная строка.

Если это не второй дочерний элемент каждого элемента списка, который вы хотите, уточните; например, вы могли бы идентифицировать сильного и получить его следующего родного брата, если это вам подходит - просто сделайте тело вложенной петли в

print anitem.find('strong').nextSibling
...