Py学习  »  Python

下载word文档python

Andy B • 7 年前 • 2710 次点击  

对于我的课程,我必须建立一个网络刮板,它可以浏览img,word文档和pdf的网站并将它们下载到一个文件中,我有img的下载工作,但当我将代码改为下载docs或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)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43384
文章 [ 2 ]  |  最新文章 7 年前
QHarr
Reply   •   1 楼
QHarr    7 年前

更重要的是,您可以使用或css选择器语法来组合pdf、docx等。注意,您仍然需要完成一些路径,例如带有前缀 "http://www.soc.napier.ac.uk/~40009856/CW/" . 以下用途 attribute = value 带$operator的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])
Alex K.
Reply   •   2 楼
Alex K.    7 年前

首先,您应该阅读.find_all()和其他方法执行的操作: .find_all()

.find_all()的第一个参数是标记名。没关系的

<img src='some_url'>

标签。你得到了所有带有soup.find_all('img')的img标记,提取了所有指向实际文件的url并下载了它们。

现在你要找的标签是

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

包含“.doc”的URL。应该是这样的:

soup.select('a[href*=".doc"]')