如何在Python中从网页上抓取图像/文件?

时间:2019-12-11 08:53:05

标签: python-3.x web-scraping urlopen

我尝试使用Python3.7.4备份博客网站中的图片,例如    http://s2.sinaimg.cn/mw690/001H6t4Fzy7zgC0WLXb01&690 如果我在Firefox地址栏中输入上述地址,则该文件将正确显示。 如果我使用以下代码下载图片,服务器将始终重定向到默认图片:

from requests import get # just to try different methods
from urllib.request import urlopen
from urllib.parse import urlsplit, urlunsplit, quote

# hard-coded address is randomly selected for debug purpose.
origPict = 'http://s2.sinaimg.cn/mw690/001H6t4Fzy7zgC0WLXb01&690' 
p = urlsplit (origPict)
newP = quote (p.path)
origPict = urlunsplit ([p.scheme, p.netloc, newP, p.query, p.fragment])

try:
  #url_file = urlopen(origPict)
  #u = url_file.geturl ()
  url_file = get (origPict)
  u = url_file.url
  if u != origPict:
    raise Exception ('Failed to get picture ' + origPict)
...

有什么线索为什么requests.get或urllib.urlopen不喜欢url中的“&”?

更新:感谢Artur的评论,我意识到问题不在于请求本身,而是站点保护机制:js或cookie或网页中的其他内容将一些信息反馈给服务器,以使其能够判断请求是否来自于scraper。因此,现在的问题转向如何从网页上抓取图片,这比从url下载图片要复杂得多。

1 个答案:

答案 0 :(得分:0)

与&符号无关,但与重定向有关。尝试添加参数allow_redirects = False来获取,应该没问题