Скачать Word документы Python - PullRequest
       1

Скачать Word документы Python

0 голосов
/ 06 декабря 2018

для моей курсовой работы, я должен построить веб-скребок, который очищает веб-сайт для img, word docs и pdf и загружает их в файл, я получаю работу по загрузке img, но когда я изменяю код для загрузки документов или pdf, он не находит ничего вообще, я использую Beautifulsoup для очистки сайта, и я знаю, что на сайте есть документы и PDF-файлы, просто не могу загрузить их.

from bs4 import BeautifulSoup
import urllib.request
import shutil
import requests
from urllib.parse import urljoin
import sys
import time
import os
import url
import hashlib
import re

url = 'http://www.soc.napier.ac.uk/~40009856/CW/'

path=('c:\\temp\\')

def ensure_dir(path):
    directory = os.path.dirname(path)
    if not os.path.exists(path):
        os.makedirs(directory) 
    return path

os.chdir(ensure_dir(path))

def webget(url): 
    response = requests.get(url)
    html = response.content
    return html

def get_docs(url):
    soup = make_soup(url)
    docutments = [docs for docs in soup.findAll('doc')]
    print (str(len(docutments)) + " docutments found.")
    print('Downloading docutments to current working directory.')
    docutments_links = [each.get('src') for each in docutments]
    for each in docutments_links:
        try:
            filename = each.strip().split('/')[-1].strip()
            src = urljoin(url, each)
            print ('Getting: ' + filename)
            response = requests.get(src, stream=True)
            # delay to avoid corrupted previews
            time.sleep(1)
            with open(filename, 'wb') as out_file:
                shutil.copyfileobj(response.raw, out_file)
        except:
            print('  An error occured. Continuing.')
    print ('Done.')

if __name__ == '__main__':
     get_docs(url)

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Больше в стороне, но вы можете использовать синтаксис селектора ИЛИ CSS для объединения pdf, docx и т. Д. Обратите внимание, что вам все равно нужно завершить некоторые пути, например, с префиксом "http://www.soc.napier.ac.uk/~40009856/CW/".В следующем примере используется attribute = value синтаксис селектора css с оператором $ (это означает, что значение строки атрибута заканчивается на)

from bs4 import BeautifulSoup
import requests
url= 'http://www.soc.napier.ac.uk/~40009856/CW/'
res = requests.get(url)
soup = BeautifulSoup(res.content, 'lxml')
items = soup.select("[href$='.docx'], [href$='.pdf'], img[src]")
print([item['href'] if 'href' in item.attrs.keys()  else item['src'] for item in items])
0 голосов
/ 06 декабря 2018

Прежде всего, вы должны прочитать, что делают .find_all () и другие методы: .find_all ()

Первый аргумент .find_all () - это имя тега.Это было нормально для

<img src='some_url'>

меток.Вы получили все теги img с soup.find_all ('img'), извлекли все URL-адреса в реальные файлы и загрузили их.

Теперь вы ищете такие теги, как

<a href='some_url'></a>

с URL-адресами, содержащими «.doc».Примерно так должно это сделать:

soup.select('a[href*=".doc"]')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...