我正在修改this script以抓取书页{}的页面like this。直接从stackoverflow使用脚本,它会正确返回所有图像,除了我想要的图像。该页面将返回为空文件,标题如下:img.php?dir = 39d761947ad84e71e51e3c300f7af8ff& file = 1.png。
在我下面的修改版中,我只是拉动书页图像。
这是我的剧本:
from bs4 import BeautifulSoup as bs
import urlparse
from urllib2 import urlopen
from urllib import urlretrieve
import os
import sys
out_folder = '/Users/Craig/Desktop/img'
def main(url, out_folder):
soup = bs(urlopen(url))
parsed = list(urlparse.urlparse(url))
for image in soup.findAll('img', id='page_image'):
print "Image: %(src)s" % image
filename = image["src"].split("/")[-1]
parsed[2] = image["src"]
outpath = os.path.join(out_folder, filename)
if image["src"].lower().startswith("http"):
urlretrieve(image["src"], outpath)
else:
urlretrieve(urlparse.urlunparse(parsed), outpath)
def _usage():
print "usage: python dumpimages.py http://example.com [outpath]"
if __name__ == "__main__":
url = sys.argv[-1]
if not url.lower().startswith("http"):
out_folder = sys.argv[-1]
url = sys.argv[-2]
if not url.lower().startswith("http"):
_usage()
sys.exit(-1)
main(url, out_folder)
有什么想法吗?
答案 0 :(得分:3)
这里的问题是您用于检索图像的网址是:
http://bookre.org/loader/img.php?dir=39d761947ad84e71e51e3c300f7af8ff&file=1.png?file=1077091&pg=1
当你真正想要的时候:
http://bookre.org/loader/img.php?dir=39d761947ad84e71e51e3c300f7af8ff&file=1.png
这是我在2分钟内一起攻击的内容,从您列出的网站下载所需的图像:
import urllib
import urllib2
import urlparse
from bs4 import BeautifulSoup
def main(url):
html = urllib2.urlopen(url)
soup = BeautifulSoup(html.read())
parsed = list(urlparse.urlparse(url))
for image in soup.find_all(id="page_image"):
if image["src"].lower().startswith("http"):
urllib.urlretrieve(image["src"], "image.png")
else:
new = (parsed[0], parsed[1], image["src"], "", "", "")
urllib.urlretrieve(urlparse.urlunparse(new), "image.png")
if __name__ == '__main__':
main("http://bookre.org/reader?file=1077091&pg=1")
脚本将图像保存为脚本所在目录中的"image.png"
。
希望这是你所追求的;如果您遇到任何困难,请告诉我们。
答案 1 :(得分:0)
在你的:
else:
urlretrieve(urlparse.urlunparse(parsed), outpath)
您需要将一些已解析的元素替换为来自image [“src”]
的元素答案 2 :(得分:0)
pyquery更容易:
from pyquery import PyQuery as pq
image, = [img.attrib['src'] for img in pq(url=url)('img#page_image')]
...
(请注意使用name,= ['string']来展开单元素列表。