urllib.error.URLError неизвестный тип URL 'https> - PullRequest
0 голосов
/ 27 апреля 2018

Я использую этот скрипт для анализа сайта и загрузки файлов, но он продолжает возвращать ту же ошибку. Я предполагал, что urllib.parse.encode и urllib.parse.urljoin, но было неясно, как и где я буду его использовать.

Я переустановил python 3.4, 3.6 и pycharm, установил Openssl безрезультатно.

import bs4 as bs
import urllib.request
from urllib.parse import urlparse, urljoin, urlencode
import lxml
import os

class tools():
    def get_page(*args):
        headers = headers = {}
        headers['User-Agent'] = "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.27 Safari/537.17"
        req = urllib.request.Request(args, headers=headers)
        resp = urllib.request.urlopen(req)
        respData = resp.read()
        return respData


class Advisorshares():
    def productscreener():
        '''Creates a csv of the list of ets advisor shares holds'''
        url = ('https://www.advisorshares.com/etfs')
        soup = bs.BeautifulSoup(tools.get_page(url), "lxml")
        table = soup.find('table')
        links = []
        tickers = []

        for i in range(0,len(table.find_all('a')),2):
            tag = table.find_all('a')[num]
            links.append(tag.get('href'))
            tickers.append(tag.text)

    def download():
        Advisorshares.productscreener()
        os.cwd('/')
        for i in tickers:
            base = urlencode('http://www.advisorshares.com/holdings-file/')
            urllib.request.urlretrieve(base + i, i + '.csv')


Advisorshares.download()

Traceback (последний вызов был последним): Файл "C: \ Program Files \ JetBrains \ PyCharm 2018.1.2 \ helpers \ pydev \ pydev_run_in_console.py", строка 52, в файле run_file Python 3.6.2 (v3.6.2: 5fd33b5 , 8 июля 2017, 04:57:36) [MSC v.1900 64 бит (AMD64)] на win32 pydev_imports.execfile (файл, глобальные переменные, локальные) # выполнить скрипт Файл "C: \ Program Files \ JetBrains \ PyCharm 2018.1 .2 \ helpers \ pydev_pydev_imps_pydev_execfile.py ", строка 18, в execfile exec (compile (contents +" \ n ", file, 'exec'), glob, loc) Файл "C: /Users/HP/Desktop/webscrapper/venv/src/webscrapper.py", строка 91, в Advisorshares.download () Файл "C: /Users/HP/Desktop/webscrapper/venv/src/webscrapper.py", строка 84, для загрузки Advisorshares.productscreener () Файл "C: /Users/HP/Desktop/webscrapper/venv/src/webscrapper.py", строка 73, в productscreener soup = bs.BeautifulSoup (tools.get_page (url), "lxml") Файл "C: / Users /HP/Desktop/webscrapper/venv/src/webscrapper.py ", строка 14, в файле get_page resp = urllib.request.urlopen (req)" C: \ Program> Files \ Python36 \ Lib \ urllib \ request.py " строка 223, в urlopen возврат opener.open (url, data, timeout) Файл "C: \ ProgramFiles \ Python36 \ Lib \ urllib \ request.py", строка 526, в открытом ответе = self._open (req, data) Файл "C: \ Program Files \ Python36 \ Lib \ urllib \ request.py ", строка 549, в _open 'unknown_open', req) Файл "C: \ Program Files \ Python36 \ Lib \ urllib \ request.py", строка 504, в _call_chain result = func (* args) Файл "C: \ Program Files \ Python36 \ Lib \ urllib \ request.py", строка 1388, в unknown_open повысить URLError ('неизвестный тип URL:% s'% type) urllib.error.URLError:

1 Ответ

0 голосов
/ 27 апреля 2018

Ваша проблема в том, что вы даете кортеж для get_page, который не может быть правильно интерпретирован как urllib.request.Request. Все, что вам нужно сделать, это изменить эту строку:

req = urllib.request.Request(args, headers=headers)

К этой строке

req = urllib.request.Request(*args, headers=headers)

Таким образом, args будет интерпретироваться как аргументы для urllib.request.Request

...