def parse(self,response): # 这个跟node比 有个缺点是 node 就是异步的,而这里好像不是异步的, # 因此第一个主页面 将会在最后才能被保存 self.savePath(response.url,response.body) # 这个路径是执行命令的位置的相对路径 urls = response.css('a').extract() imgs = response.css('img').extract() for a in response.css('a'): if a.css('::attr(href)').extract() != None: item = BootcssItem() link=a.css('::attr(href)').extract()[0] item['title']=a.css('::attr(title)').extract() item['link']=link # print(item) if link not in self.crawled_urls: self.crawled_urls.append(link) if link.startswith('http'): # 大部分是外部链接 pass elif link.startswith('#'): # 页面锚点 pass else : if link.endswith('.js'): # js文件 pass elif link.endswith('.css'): # css文件 pass else: # 正常的页面链接 targetUrl=urljoin(response.url,link) yield scrapy.Request(targetUrl, self.parse)
def saveImg(self,path,content): tempPath=path[len(self.start_urls[0]):] if os.path.splitext(tempPath)[1] == '': # 链接没有路径,restful 风格 # 处理方式都转换成一个index.html path=urljoin(path,'index.html') else: pass path=path[7:] saveWebFile(path,content)
def handleA(self,url): if url.startswith('http'): # 完整路径 pass elif url.startswith('#'): # 锚点 return None else: # 绝对路径或者是相对路径 url=urljoin(self.start_urls[0],url) return url