利用python抓取网站图片

逐个世纪 发布于 2014/06/09 09:43
阅读 2K+
收藏 2

看了网上关于python抓取网站图片的例子,所以自己也尝试着写一个,但是发现这个网站的src不是标准的路径,需要自己添加前面的目录地址,尝试了几次也不成功,所以希望有经验的朋友指导下。 本人是初学者,表达上不当的地方还请见谅

代码如下

#coding utf-8

import re

import urllib

import urllib2


def getHtml(url):

    page = urllib.urlopen(url)

    html = page.read()

    return html


def getImg(html):

    reg = r'src=".+?\.jpg"'

    imgre = re.compile(reg)

    imglist = imgre.findall(html)

    x = 0

    for imgurl in imglist:

        urllib.urlretrieve("http://www.hnzzzx.gov.cn/"+imgurl,'%s.jpg' % x)

        x = x + 1        

   

html = getHtml("http://www.hnzzzx.gov.cn/showzxwy.asp?lx=%D5%FE%D0%AD%CE%AF%D4%B1&js=8%B5%DA%B0%CB%BD%EC&classname=%D5%FE%D0%AD%CE%AF%D4%B1&jb=01&pageno=1")

getImg(html)


加载中
0
万里谁能驯
万里谁能驯
大胆!政协委员的头像你也敢乱抓!
0
万里谁能驯
万里谁能驯
问题出在正则表达式上,reg = r'src=".+?\.jpg"',如果你看过网页源码的话,会发现src=后面没有引号。
另外某些图片的后缀不是jpg而是JPG,所以在编译正则表达式的时候要带上re.I选项。
这样抓出的结果是src=***这种格式的,改成src=(.+?\.jpg)。
0
逐个世纪
逐个世纪

按照你的方法,换了下正则,可以下载图片(高兴了下),但发现下载的图片打不开的,打印了imgurl,发现是链接合成的时候出了问题,请高手指点下,实在弄不出来呀!学艺不精呀,如果方便的话 下载的图片命名和网站上的一致,谢谢!


0
freesnow
freesnow

把你的代码试了一下,把正则改成了reg = r'src=(.+?\.jpg)',没有变动其他地方,下载到了图片,你没有下载到正确的图片,可能是因为你把正则中的小括号去掉了?那样的话imglist的内容就不一样了。

如果你想下到的图片名称和url中相同,可以把x变量去掉,用urllib.urlretrieve("http://www.hnzzzx.gov.cn/"+imgurl,'%s.jpg' % imgurl.split("/")[-1])

0
逐个世纪
逐个世纪

引用来自“freesnow”的评论

把你的代码试了一下,把正则改成了reg = r'src=(.+?\.jpg)',没有变动其他地方,下载到了图片,你没有下载到正确的图片,可能是因为你把正则中的小括号去掉了?那样的话imglist的内容就不一样了。

如果你想下到的图片名称和url中相同,可以把x变量去掉,用urllib.urlretrieve("http://www.hnzzzx.gov.cn/"+imgurl,'%s.jpg' % imgurl.split("/")[-1])

谢谢!运行成功

关于图片名称,我希望是下载后的图片名称是有对应人名(和网站展示一样),就是指下载的图片对应姓名,这个姓名是要用另外正则去取的,我就是不知道怎么关联起来,明天再试试!

0
freesnow
freesnow
def getImg(html):
    imgre = re.compile(r'(?i)src=(.+?\.jpg)')
    namere = re.compile(r'<td align="center"><font color="#808080">([^<]+)')
    imglist = imgre.findall(html)
    namelist = namere.findall(html)
    for num in range(len(imglist)):
        urllib.urlretrieve("http://www.hnzzzx.gov.cn/"+imglist[num],'%s.jpg' % namelist[num])



逐个世纪
逐个世纪
谢谢,各位的解答0,图片下载好了
0
数据工厂
数据工厂
推荐使用神箭手云爬虫来抓取网页数据,完全在云端编写和运行很快很暴力
返回顶部
顶部