Красивый суп и в то время как заявление - PullRequest
1 голос
/ 29 апреля 2011

Я пытаюсь найти первые 30 видео TED (название видео и URL), используя следующий скрипт BeautifulSoup:

import urllib2
from BeautifulSoup import BeautifulSoup

total_pages = 3
page_count = 1
count = 1

url = 'http://www.ted.com/talks?page='

while page_count < total_pages:

    page = urllib2.urlopen("%s%d") %(url, page_count)

    soup = BeautifulSoup(page)

    link = soup.findAll(lambda tag: tag.name == 'a' and tag.findParent('dt', 'thumbnail'))

    outfile = open("test.html", "w")

    print >> outfile, """<head>
            <head>
                    <title>TED Talks Index</title>
            </head>

            <body>

            <br><br><center>

            <table cellpadding=15 cellspacing=0 style='border:1px solid #000;'>"""

    print >> outfile, "<tr><th style='border-bottom:2px solid #E16543; border-right:1px solid #000;'><b>###</b></th><th style='border-bottom:2px solid #E16543; border-right:1px solid #000;'>Name</th><th style='border-bottom:2px solid #E16543;'>URL</th></tr>"

    ted_link = 'http://www.ted.com/'

    for anchor in link:
            print >> outfile, "<tr style='border-bottom:1px solid #000;'><td style='border-right:1px solid #000;'>%s</td><td style='border-right:1px solid #000;'>%s</td><td>http://www.ted.com%s</td></tr>" % (count, anchor['title'], anchor['href'])

    count = count + 1

    print >> outfile, """</table>
                    </body>
                    </html>"""

    page_count = page_count + 1

Код выглядит хорошо минус две вещи:

  1. количество не увеличивается. Он только просматривает и находит контент первой страницы, то есть: первые десять, а не тридцать видео. Почему?

  2. Этот бит кода дает мне много ошибок. Я не знаю, как еще реализовать то, что я хочу, здесь логически (с помощью urlopen ("% s% d"):

Код:

total_pages = 3
page_count = 1
count = 1

url = 'http://www.ted.com/talks?page='

while page_count < total_pages:

page = urllib2.urlopen("%s%d") %(url, page_count)

1 Ответ

1 голос
/ 29 апреля 2011

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

for pagenum in xrange(1, 4):  # The 4 is annoying, write it as 3+1 if you like.
  url = "http://www.ted.com/talks?page=%d" % pagenum
  # do stuff with url

Но давайте открывать файл вне цикла, а не открывать его каждую итерацию.Вот почему вы видели только 10 результатов: говорите 11-20, а не первые десять, как вы думали.(Было бы 21-30, если бы вы не зациклились на page_count < total_pages, который обрабатывал только первые две страницы.)

И соберите все ссылки сразу, а затем напишите результат.Я убрал стилевое оформление HTML, что также облегчает выполнение кода;вместо этого используйте CSS, возможно встроенный элемент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...