看文章之前,先让我们唱一首歌:<blockquote>拒绝黄,拒绝毒,拒绝黄赌毒</blockquote>继上一次想让大侄子找个网站页面练习一下,机智的我就想到了我珍藏多年的网站合集(不开车,谢谢):
嘟嘟嘟要说图片网站,1024在我心目中还是占有一定地位的,而且这种代码开车的方式还充满了学习的劲头,为了不开快车,我找了一个比较含蓄的帖子:
<code>http://ns.postcc.us/htm_data/8/1707/2506194.html</code> 页面元素
中间和大侄子讨论暂且不表,无非都是些老知识巩固而已,我很快就将代码撸了出来:
<code>import urllib
from bs4 import BeautifulSoup
import re
import requests
import bs4
import wget
url = "http://ns.postcc.us/htm_data/8/1707/2506194.html"
headers = {'User-agent' : 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0'}
html = requests.get(url,headers = headers)
soup = bs4.BeautifulSoup(html.content, 'html.parser')
img_url_arr = soup.find_all('input', attrs={'type': 'image'})
for index, img_url in enumerate(img_url_arr):
print img_url['src']
file_name_suffix = re.findall(r'.[^./:*?<>|rn]+$', img_url['src'])[0]
file_name = str(index) + file_name_suffix
print file_name
urllib.urlretrieve(img_url['src'],file_name)</code>
如果你够细心的话,会发现我写了headers,而且import了很多moduel,咱们暂且不说这个,先说这个:
<code>file_name_suffix = re.findall(r'.[^./:*?<>|rn]+$', img_url['src'])[0]</code>
获取图片后缀,之前写的作废。
大家遇到正则的时候一定要深入看一看。
回过头来说,为什么我写headers,因为刚写完我发现了一个问题,网页我能抓下来,甚至图片的下载链接我都能全部打印出来了,复制到迅雷都能下载了,结果在下载图片的时候
<code> urllib.urlretrieve(img_url['src'],file_name)</code>
下载的图片大小都为0k,而且完全打不开,和前端的小伙伴(我这两天住在他家里)讨论了一下午也没讨论出来。
迫不得已,又去麻烦了一下主营python写服务器的小伙伴(嗯,除了发小之外的朋友大概都是程序员了),他给我发过来一个这个:
<code>_,res = urllib.urlretrieve(img_url['src'], file_name)
for k, v in res.items():
print(k, v)
</code>
这段代码是写在这里的:
<code>for index, img_url in enumerate(img_url_arr):
print img_url['src']
file_name_suffix = re.findall(r'.[^./:*?<>|rn]+$', img_url['src'])[0]
file_name = str(index) + file_name_suffix
print file_name
_,res = urllib.urlretrieve(img_url['src'], file_name)
for k, v in res.items():
print(k, v)</code>
打印出来,发现我下载的东西的type竟然是html/tetx的,并不是图片格式,也就是说返回了一个莫名其妙的东西。
而且提示我<b>跨域</b>
我把下载的文件格式直接改为html(在程序里改,下载之后改没用),然后把它打开,是这个样子的:
我之前知道跨域这个概念,难道不是抓取网页数据的时候才会跨域吗?难道下载图片也会跨域?我在get图片的时候难道要加上cookie?很多东西不理解,先搁置在这,来日再攻。
网友评论
元素查看里的src可以直接打开图片,但爬下来的时候就没有了,只剩下onclick tag后面新生成的一个src。初接触不太懂,请教一下。