【问题标题】:Dowloading Word docs python下载 Word 文档 python
【发布时间】:2018-12-06 10:52:52
【问题描述】:

对于我的课程作业,我必须构建一个网络抓取工具,用于为 img、word docs 和 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 web-scraping download


    【解决方案1】:

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

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

    <img src='some_url'>

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

    现在您正在寻找像

    这样的标签

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

    网址包含“.doc”。应该这样做:

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

    【讨论】:

    • @akozi 我不知道在答案中插入 html 标签的任何其他方式。你呢?
    【解决方案2】:

    更多的是,但您可以使用 OR 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])
    

    【讨论】:

    • 你试过了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多