Python-Wikipedia Automated Downloader - PullRequest
       11

Python-Wikipedia Automated Downloader

0 голосов
/ 12 марта 2011

[Использование Python 3.1] Кто-нибудь знает, как сделать так, чтобы приложение Python 3 позволяло пользователю писать текстовый файл с несколькими словами, разделенными запятыми.Программа должна прочитать файл и загрузить страницу Википедии с запрашиваемым элементом.например, если они напишут привет, python-3, chicken, они перейдут в Википедию и загрузят http://www.wikipedia.com/wiki/hello, http://www.wikip... Кто-нибудь думает, что они могут это сделать?

Когда я говорю «скачать», язначит, скачать текст, не имеет значения, изображения.

Ответы [ 3 ]

1 голос
/ 12 марта 2011

Посмотрите вверх urllib.request.

1 голос
/ 12 марта 2011

Вы точно описали, как сделать такую ​​программу. Так в чем же вопрос?

Вы читаете файл, разделяете его запятыми и загружаете URL. Готово!

0 голосов
/ 04 августа 2012

Проверьте следующий код, он загружает html без изображений, но вы можете получить к ним доступ из файла xml, который анализируется для получения URL.

from time import sleep
import urllib
import urllib2
from xml.dom import minidom, Node

def main():
    print "Hello World"

    keywords = []

    key_file = open("example.txt", 'r')
    if key_file:
        temp_lines = key_file.readlines()

        for keyword_line in temp_lines:
            keywords.append(keyword_line.rstrip("\n"))

        key_file.close()

    print "Total keywords: %d" % len(keywords)
    for keyword in keywords:
        url = "http://en.wikipedia.org/w/api.php?format=xml&action=opensearch&search=" + keyword
        xmldoc = minidom.parse(urllib.urlopen(url))
        root_node = xmldoc.childNodes[0]

        section_node = None
        for node in root_node.childNodes:
            if node.nodeType == Node.ELEMENT_NODE and \
            node.nodeName == "Section":
                section_node = node
                break

        if section_node is not None:
            items = []
            for node in section_node.childNodes:
                if node.nodeType == Node.ELEMENT_NODE and \
                node.nodeName == "Item":
                    items.append(node)

            if len(items) == 0:
                print "NO results found"
            else:
                print "\nResults found for " + keyword + ":\n"
                for item in items:
                    for node in item.childNodes:
                        if node.nodeType == Node.ELEMENT_NODE and \
                        node.nodeName == "Text":
                            if len(node.childNodes) == 1:
                                print node.childNodes[0].data.encode('utf-8')

                file_name = None
                for node in items[0].childNodes:
                    if node.nodeType == Node.ELEMENT_NODE and \
                    node.nodeName == "Text":
                        if len(node.childNodes) == 1:
                            file_name = "Html\%s.html" % node.childNodes[0].data.encode('utf-8')
                            break

                if file_name is not None:
                    file = open(file_name, 'w')
                    if file:
                        for node in items[0].childNodes:
                            if node.nodeType == Node.ELEMENT_NODE and \
                            node.nodeName == "Url":
                                if len(node.childNodes) == 1:
                                    user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)'
                                    header = { 'User-Agent' : user_agent }
                                    request = urllib2.Request(url=node.childNodes[0].data, headers=header)
                                    file.write(urllib2.urlopen(request).read())
                                    file.close()
                                    break


    print "Sleeping"
    sleep(2)

if __name__ == "__main__":
    main()
...