我需要导航到不同的网址,以便从每个网址下载图片。 网址是顺序的,所以我认为最好手动创建它们,而不是使用每个页面中的“下一步”按钮。 我正在尝试生成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'
但他们都应该是字符串。
答案 0 :(得分:3)
我可以在Python [...]中使用
os.path.join()
加入网址吗?
不便携,没有。对于非Unix操作系统,路径分隔符不是'/'
,因此您将创建格式错误的URI。
[...]有更好的方法吗?
是。您可以使用urllib。