Ошибка «TypeError: ожидаемая строка или байтовоподобный объект» - PullRequest
0 голосов
/ 09 января 2019

Я использую Python3 и в моем коде появляется следующая ошибка. пытается скачать pdf и хранить в локальном каталоге

r_l = 'https://www.ccc.com'
class Data:

    def getlk(self, url):
        all_links = []
        page = requests.get(url)
        soup = BeautifulSoup(page.text, 'html.parser')
        for href in soup.find_all(class_='omrlist'):
            all_links.append(root_url + href.find('a').get('href'))
        return all_links

    def getmth_lk(self, ylk):
        rpLk = []
        for url in ylk:
            links = self.getlk(url)
            reportLinks.append(links)


            for url_ in links:
                if ".pdf" in url_:
                    if "Annual" not in url_:
                        lastindex = url_.rfind('/')
                        strlen = len(url_)
                        filename = url_[lastindex:strlen].replace("/", "")

                        file = pathlib.Path('/home/' + filename)
                        if not file.exists():
                            urllib.request.urlretrieve(rpLk, str(filename))


if __name__ == '__main__':
    obj = Data()
    yLk = obj.getlk(r_l + '/oil/reports/')
    mth_lk = obj.getmth_lk(yLk)

Я попробовал вышеуказанный код, но ошибка приходит

Traceback (most recent call last):
  File "/home/dwnpdf-to-dir.py", line 248, in <module>
    mth_lk = obj.getmth_lk(yLk)
  File "/home/dwnpdf-to-dir.py", line 228, in getmth_lk
    urllib.request.urlretrieve(rpLk, str(filename))
  File "/usr/lib/python3.5/urllib/request.py", line 186, in urlretrieve
    url_type, path = splittype(url)
  File "/usr/lib/python3.5/urllib/parse.py", line 861, in splittype
    match = _typeprog.match(url)
TypeError: expected string or bytes-like object

грядет вышеприведенная ошибка. Итак, пожалуйста, помогите мне преодолеть эту ошибку

1 Ответ

0 голосов
/ 09 января 2019

Как сказано в ошибке, urlretrieve принимает в качестве первого позиционного аргумента a string or bytes-like object. Однако rpLk - это список.

Не лучше ли передать аргумент url_ в качестве аргумента?

Вы пытаетесь загрузить файл, если вы еще этого не сделали? Я думаю, что вы должны использовать urllib.request.urlopen вместо.

...