为了学习的目的,我试图下载Buzzfeed文章的所有帖子图像。下载的图像是空白图像,而不是实际图像
这里是我的代码:
import lxml.html
import string
import random
import requests
url ='http://www.buzzfeed.com/mjs538/messages-from-creationists-to-people-who-believe-in-evolutio?bftw'
headers = headers = {
'User-Agent': 'Mozilla/5.0',
'From': '[email protected]'
}
page= requests.get(url)
tree = lxml.html.fromstring(page.content)
#print(soup.prettify()).encode('ascii', 'ignore')
images = tree.cssselect("div.sub_buzz_content img")
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for x in range(size))
for image in images:
with open(id_generator() + '.jpg', 'wb') as handle:
request = requests.get(image.attrib['src'], headers=headers, stream=True)
for block in request.iter_content(1024):
if not block:
break
handle.write(block)
什么被检索的图像的所有110个字节大小,并查看他们只是一个空的图像。我在我的代码中做错了什么,导致了这个问题?如果有更简单的方法来执行此操作,我不必使用请求。
尝试添加一个用户代理到您的请求。许多网络服务器拒绝没有用户代理的请求。通常在抓取时在用户代理中留下一个电子邮件地址,以便让服务器所有者在您不批准抓取时与您联系。 –
@SteinarLima仍然没有添加用户代理的运气。我用新代码更新了OP。我相信我正确实施了用户代理? – ComputerLocus
另一个说明:您不应该将这些图像保存在您的计算机上。他们会让你看起来很愚蠢。 –