Python 爬取单个网页所需要加载的地址和CSS、JS文件地址

来源:互联网 发布:流水别墅尺寸数据 编辑:程序博客网 时间:2024/05/26 19:17

Python 爬取单个网页所需要加载的URL地址和CSS、JS文件地址

通过学习Python爬虫,知道根据正式表达式匹配查找到所需要的内容(标题、图片、文章等等)。而我从测试的角度去使用Python爬虫,希望爬取到访问该网页所需要的CSS、JS、URL,然后去请求这些地址,根据响应的状态码判断是否都可以成功访问。


代码

'''Created on 2017-08-02  @author: Lebb  '''import sysimport urllib2import rereload(sys)sys.setdefaultencoding('utf-8')url = "https://www.szrtc.cn/"http = "http"request = urllib2.Request(url,headers=Headers)responsecode = Noneerrorcount = 0itemurl = urldef getResponse():    try:        response = urllib2.urlopen(request)    except urllib2.HTTPError,he:        print he.code    except urllib2.URLError,ue:        print ue.reason    else :        return response.read().decode('utf-8')def getUrl():    html = getResponse()    patterncss ='<link href="(.*?)"'    patternjs = '<script src="(.*?)"'    patternimg = '<img src="(.*?)"'    patternpage = '<a.*?href="(.*?)"'    patternonclick = "openQuestion.*?'(.*?)'"    href = re.compile(patterncss, re.S).findall(html)    href += re.compile(patternimg, re.S).findall(html)    href += re.compile(patternpage, re.S).findall(html)    href += re.compile(patternjs, re.S).findall(html)    href += re.compile(patternonclick, re.S).findall(html)return hrefdef reasonCode():    global errorcount    itemurl = getUrl()    for item1 in itemurl:        if http in item1:            sendurl = item1        else:            sendurl = url + item1        try:            print sendurl            responseurl = urllib2.urlopen(sendurl,timeout=8)        except urllib2.HTTPError,he:            responsecode = he.code            errorcount += 1        except urllib2.URLError,ue:            responsecode = ue.reason            errorcount += 1        else:            responsecode = responseurl.getcode()            if(responsecode != 200):                errorcount += 1                       print responsecode        #return responsecode    print errorcount

运行的结果:
运行截图

错误截图:
错误截图

实际上这条请求复制到浏览器是可以访问的,但是Python 的urllib2访问时,因为请求带中文参数,没有进行编码转换,导致报400错误。
尝试在代码中加入utf-8,还是没有效果,仍然报错。
这个问题先记下来,后面去找到其他解决办法