我可以在Python中使用os.path.join()加入URL吗?还有更好的方法吗?

时间:2018-05-29 13:10:04

标签: python python-3.x

我需要导航到不同的网址,以便从每个网址下载图片。 网址是顺序的,所以我认为最好手动创建它们,而不是使用每个页面中的“下一步”按钮。 我正在尝试生成url的不同部分,然后将它们与os.path.join()连接在一起。

这是我的工作代码:

starting_url = 'https://www.mangareader.net/one-piece'
storing_folder = '/Users/macbook/Documents/Media/Fumetti/One_Piece'
ch_numb_regex = re.compile(r'\d+')
for chapter in os.listdir(storing_folder):
    if not chapter.startswith('.'):
        if os.listdir(os.path.join(storing_folder, chapter)) == []:
            continue
        else:
            try:
                page = 1
                while True:
                    res = requests.get(os.path.join(starting_url, str(ch_numb_regex.search(chapter).group()) ,str(page)))
                    res.raise_for_status()
                    manga_soup = bs4.BeautifulSoup(res.text, 'lxml')
                    manga_image = manga_soup.select('#imgholder img')
                    manga_url = manga_image[0].get('src')
                    res = requests.get(manga_url)
                    res.raise_for_status()
                    imageFile = open(os.path.join(storing_folder, chapter, page), 'wb')
                    imageFile.write()
                    imageFile.close()
                    page += 1
            except requests.HTTPError:
                continue

然而,我收到错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-20-1ee22580435e> in <module>()
      7 res = requests.get(manga_url)
      8 res.raise_for_status()
----> 9 imageFile = open(os.path.join(storing_folder, chapter, page), 'wb')
     10 imageFile.write()
     11 imageFile.close()

/anaconda3/lib/python3.6/posixpath.py in join(a, *p)
     90                 path += sep + b
     91     except (TypeError, AttributeError, BytesWarning):
---> 92         genericpath._check_arg_types('join', a, *p)
     93         raise
     94     return path

/anaconda3/lib/python3.6/genericpath.py in _check_arg_types(funcname, *args)
    147         else:
    148             raise TypeError('%s() argument must be str or bytes, not %r' %
--> 149                             (funcname, s.__class__.__name__)) from None
    150     if hasstr and hasbytes:
    151         raise TypeError("Can't mix strings and bytes in path components") from None

TypeError: join() argument must be str or bytes, not 'int'

但他们都应该是字符串。

1 个答案:

答案 0 :(得分:3)

  

我可以在Python [...]中使用os.path.join()加入网址吗?

不便携,没有。对于非Unix操作系统,路径分隔符不是'/',因此您将创建格式错误的URI。

  

[...]有更好的方法吗?

是。您可以使用urllib