Пакетная загрузка текста и изображений с URL с помощью Python / urllib / beautifulsoup? - PullRequest
4 голосов
/ 27 октября 2011

Я просматривал несколько сообщений здесь, но я просто не могу разобраться с пакетной загрузкой изображений и текста с заданного URL-адреса с помощью Python.

import urllib,urllib2
import urlparse
from BeautifulSoup import BeautifulSoup
import os, sys

def getAllImages(url):
    query = urllib2.Request(url)
    user_agent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705)"
    query.add_header("User-Agent", user_agent)

    page = BeautifulSoup(urllib2.urlopen(query))
    for div in page.findAll("div", {"class": "thumbnail"}):
        print "found thumbnail"
        for img in div.findAll("img"):
            print "found image"
            src = img["src"]
            if src:
                src = absolutize(src, pageurl)
                f = open(src,'wb')
                f.write(urllib.urlopen(src).read())
                f.close()
        for h5 in div.findAll("h5"):
            print "found Headline"
            value = (h5.contents[0])
            print >> headlines.txt, value


def main():
    getAllImages("http://www.nytimes.com/")

Выше теперь обновленный код. Что происходит, ничего не значит. Код не может найти какой-либо div с миниатюрой, очевидно, не приводит ни к какому отпечатку .... Так что, вероятно, мне не хватает некоторых указателей для получения правильных div, содержащих изображения и заголовки?

Большое спасибо!

1 Ответ

1 голос
/ 27 октября 2011

Используемая вами ОС не знает, как записать путь к файлу, который вы передаете в src.Убедитесь, что имя, которое вы используете для сохранения файла на диск, действительно может использовать ОС:

src = "abc.com/alpha/beta/charlie.jpg"
with open(src, "wb") as f:
    # IOError - cannot open file abc.com/alpha/beta/charlie.jpg

src = "alpha/beta/charlie.jpg"
os.makedirs(os.path.dirname(src))
with open(src, "wb" as f:
    # Golden - write file here

, и все начнет работать.

Пара дополнительных мыслей:

  1. Обязательно нормализуйте путь к файлу сохранения (например, os.path.join(some_root_dir, *relative_file_path*)) - в противном случае вы будете записывать изображения на весь жесткий диск в зависимости от их src.
  2. Если вы неВыполняя какие-либо тесты, хорошо бы объявить, что вы бот в своей строке user_agent и почитать robots.txt файлы (или, альтернативно, предоставить какую-то контактную информацию, чтобы люди могли попросить вас остановиться, если это необходимо).
...