python 网络爬虫问题

来源:互联网 发布:中世纪手机游戏知乎 编辑:程序博客网 时间:2024/06/08 03:37

运行环境为python3.4 

遇到的问题:第一个,通过gethtml(url)返回的是一个字节数组,而正则表达式编译后返回的是一个字符串。findall()函数需要两个参数都是一致的类型。因此由两种解决方式。第一种解决方式是将正则表达式编译成字节码,即  req=b'(http:[^\s]*?\.jpg)';第二种解决方式是将字节字符转换为字符串,即str(字节数组)

第二个问题:正则表达式问题。这点没想通。在python2.0以上的通过使用req=r'src="(.*?\.jpg) "'即可,但在3.0以上则匹配不到任何东西,得使用 req=r'(http:[^\s]*?\.jpg)'这样的形式,欢迎大家指教

第三个问题:通过使用这样的正则表达式,匹配上的字符串包括这两种形式http://www.237.cc/7330jianyue/5332_4.html","pic_url":"http://www.237.cc/uploads/pcline/568_15_1920x1200.jpg', '

http://cdn.t02.pic.sogou.com/ac75323d6b6de243-503c0c74be6ae02f-3913db5c868f40d94849122717709501_i.jpg',

第一种形式的字符串不能直接通过urllib.request.urlretrieve函数解索出来,必须取这个里面的url地址,比较笨拙的办法就是先定位http的位置,在取出该http

import re

#import file
import struct
import urllib.request
def gethtml(url):#获得指定url上的所有文件
    page=urllib.request.urlopen(url)
    html=page.read()
    print(type(html))
    return html
def getImg(html):#获得该网页上所有的照片
    #req=r'src="(.*?\.jpg) width"'
   # req=r'(http:[^\s]*?jpg)'
    req=r'(http:[^\s]*?\.jpg)'
    #req=r'([^\s]*?jpg) width'
    imgre=re.compile(req)
    imglist=re.findall(imgre,str(html))
    
    print(imglist)
    print(type(imglist))
    x=0
    for i in imglist:
        if "pic_url" not in i:
           print(i)
           urllib.request.urlretrieve(i,'%s.jpg'%x)#下载图片
           x+=1
        else:
            nPos =i.index("pic_url")
            sStr1 = i[nPos+10:]
            print(sStr1)
            urllib.request.urlretrieve(sStr1,'%s.jpg'%x)
            x+=1
0 0
原创粉丝点击