美文网首页为了更好的活着小呱呱的随笔
草榴社区1024 爬虫的坑 (python小白登天日记)

草榴社区1024 爬虫的坑 (python小白登天日记)

作者: DoraLvor | 来源:发表于2017-07-10 02:36 被阅读110422次

    看文章之前,先让我们唱一首歌:<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(在程序里改,下载之后改没用),然后把它打开,是这个样子的:

    html打开之后

    我之前知道跨域这个概念,难道不是抓取网页数据的时候才会跨域吗?难道下载图片也会跨域?我在get图片的时候难道要加上cookie?很多东西不理解,先搁置在这,来日再攻。

    相关文章

      网友评论

      • 5aeeca6ca2ba:你好,我在爬的时候发现得到input的src会改变。
        元素查看里的src可以直接打开图片,但爬下来的时候就没有了,只剩下onclick tag后面新生成的一个src。初接触不太懂,请教一下。
      • 18ffeef59ba6:哈哈,

      本文标题:草榴社区1024 爬虫的坑 (python小白登天日记)

      本文链接:https://www.haomeiwen.com/subject/yvtyhxtx.html